srfi.235
- コンビネータ (SRFI) ¶このSRFIはコンビネータのユーティリティを提供します。 Gaucheは組み込みでよく使われるコンビネータを持っていますが、このSRFIはそれを補強します。
以下の手続きは組み込みです。詳しくはコンビネータを参照してください。
constantly complement flip swap boolean
手続きを取って手続きを返す手続きです。
[SRFI-235]{srfi.235
}
2つの引数を取る手続きを返します。その手続きが呼ばれると、右側の引数を無視して
左側の引数をprocに渡します。
((on-left car) '(a b) '(c d)) ⇒ a
[SRFI-235]{srfi.235
}
2つの引数を取る手続きを返します。その手続きが呼ばれると、左側の引数を無視して
右側の引数をprocに渡します。
((on-right car) '(a b) '(c d)) ⇒ c
[SRFI-235]{srfi.235
}
任意個の引数を取る、次の動作をする関数を返します。
各引数に対し、pred …を左から順に適用します。predが#f
を
返したらただちに#f
を返します。全ての引数に対し、全てのpredが真の値を
返したら、最後の評価値を返します。predがゼロ個の場合、もしくは返された関数が
引数無しで呼び出された場合は#t
を返します。
((conjoin char? digit->integer) #\1 #\2 #\3) ⇒ 3 ((conjoin char? digit->integer) #\1 #\a #\3) ⇒ #f
[SRFI-235]{srfi.235
}
任意個の引数を取る、次の動作をする関数を返します。
各引数に対し、pred …を左から順に適用します。predが真の値を
返したらただちにその値を返します。全ての引数に対し、全てのpredが#f
を
返したら、#f
を返します。predがゼロ個の場合、もしくは返された関数が
引数無しで呼び出された場合は#f
を返します。
((disjoin integer? char?) 'a 'b 'c) ⇒ #f ((disjoin integer? char?) #\a 'b 'c) ⇒ #t
[SRFI-235]{srfi.235
}
手続きを返します。返された手続きは、適用された際に、
各procを順に呼び出します。procの結果は捨てられます。
(define (f x y) (print (+ x y))) (define (g x y) (print (* x y))) ((each-of f g) 2 7) ⇒ #<undef>; prints 9 and 14
[SRFI-235]{srfi.235
}
リストをひとつ取る手続きを返します。
返された手続きは、リストの要素に順にpredを適用してゆきます。
それが#f
を返したらそこで適用を打ち切り#f
を返します。
そうでなければ最後のpredの適用結果を返します。
空リストに適用された場合は#t
を返します。
次の等価性が成り立ちます:
((all-of pred) list) ≡ (every pred list)
[SRFI-235]{srfi.235
}
リストをひとつ取る手続きを返します。
返された手続きは、リストの要素に順にpredを適用してゆきます。
それが真の値を返したらそこで適用を打ち切りその値を返します。
そうでなければ#f
を返します
空リストに適用された場合は#f
を返します。
次の等価性が成り立ちます:
((any-of pred) list) ≡ (any pred list)
[SRFI-235]{srfi.235
}
(apply (on reducer mapper) args)
が
(apply reducer (map mapper args))
と同じ動作になるような手続きを返します。
(define square-sum (on + square)) (square-sum 1 2 3 4 5) ⇒ 55
[SRFI-235]{srfi.235
}
Returns a procedure such that, when applied to more args, calls proc
with arg … and the given args. In other words,
returns a specialized procedure with the left argumen(s) are given
as arg ….
In Gauche, this is the same as (pa$ arg …)
(see コンビネータ).
((left-section list 'a 'b 'c) 'd 'e 'f) ⇒ (a b c d e f)
[SRFI-235]{srfi.235
}
Returns a procedure such that, when applied to more args, calls proc
with the newly given args concatenated with (reverse arg …)
.
((right-section list 'a 'b 'c) 'd 'e 'f) ⇒ (d e f c b a)
The reason that arg … is reversed is because of this invariance:
(right-section proc arg arg1 ...) ≡ (right-section (right-section proc arg) arg1 ...)
[SRFI-235]{srfi.235
}
Returns a procedure such that it applies the last procedure to the
given arguments, then applies the previous procedure on the
returned value(s), and so on. Returns the result(s) of proc.
((apply-chain car cdr) '(a b c d)) ⇒ b ((apply-chain list div-and-mod) 10 3) ⇒ (3 1)
[SRFI-235]{srfi.235
}
Returns a procedure such that proc is applied on the argument
list after taking/dropping n arguments. That is,
(arguments-drop proc n)
is
(^ args (apply proc (drop args n)))
, and so on.
((arguments-drop list 2) 'a 'b 'c 'd 'e) ⇒ (c d e) ((arguments-drop-right list 2) 'a 'b 'c 'd 'e) ⇒ (a b c) ((arguments-take list 2) 'a 'b 'c 'd 'e) ⇒ (a b) ((arguments-take-right list 2) 'a 'b 'c 'd 'e) ⇒ (d e)
[SRFI-235]{srfi.235
}
Returns a procedure that takes one list argument. It applies
key-proc to each element of the list to get keys, and then
elements with the same key are grouped into a fresh list, and
returns list of such groups.
The keys are compared with equal, which defaults to equal?
.
Within each group, elements that appears left in the original list
also appears on the left.
((group-by key-proc eq-proc) lis)
works like
(group-collection lis :key key-proc :test eq-proc)
, except
that group-collection
can take any collection
(see コレクションからの選択と探索).
((group-by (cut string-ref <> 0) char-ci=?) '("apricot" "Banana" "Apple" "blueberry")) ⇒ (("apricot" "Apple") ("Banana" "blueberry"))
[SRFI-235]{srfi.235
}
thunk …を左から順に呼び出します。最後のthunkの呼び出し
以外の結果は捨てられます。最後のthunkの呼び出し結果が返されます。
thunkがひとつも与えられなかった場合は#<undef>
が返されます。
[SRFI-235]{srfi.235
}
valueが真ならthen-thunkを呼び、その結果を返します。
そうでなければelse-thunkを呼び、その結果を返します。
[SRFI-235]{srfi.235
}
valueが真または偽の値に評価されたら、
各thunkを順に呼び出して、未定義値を返します。
そうでなければ直ちに返ります。
[SRFI-235]{srfi.235
}
valueが真の値に評価されたら、
その値を引数にthen-procを呼び出しその戻り値を返します。
そうでなければ、else-thunkを引数なしで呼び出しその戻り値を返します。
[SRFI-235]{srfi.235
}
[SRFI-235]{srfi.235
}
thunk …を左から順に呼んでいきます。#f
を返すサンクがあれば
そこで評価を打ち切り#f
を返します。最後のサンクまでどれも#f
を返さなければ、
最後のサンクの結果を戻り値とします。thunkがひとつも与えられなかった場合は
#t
を返します。
[SRFI-235]{srfi.235
}
thunk …をまず全て呼び出し、それから結果を調べます。
どれかひとつでも#f
があったら#f
を返します。
そうでなければ、最後のthunkの結果を返します。
thunkがひとつも与えられなかった場合は#t
を返します。
[SRFI-235]{srfi.235
}
thunk …を左から順に呼んでいきます。真の値を返すサンクがあれば
そこで評価を打ち切りその値を返します。最後のサンクまでどれも真の値を返さなければ
#f
を返します。thunkがひとつも与えられなかった場合は
#t
を返します。
[SRFI-235]{srfi.235
}
thunk …をまず全て呼び出し、それから結果を左から右へ調べ、
最初に出会った真の値を返します。全てが#f
であったり、
thunkがひとつも与えられなかった場合は#f
を返します。
[SRFI-235]{srfi.235
}
thunkを呼び出しその結果を返します。
これは他の手続きに渡すのに便利です。例えば:
(map funcall-procedure list-of-procedures)
。
[SRFI-235]{srfi.235
}
繰り返しthunkを呼びます。thunkからの大域脱出のみが
ループを抜ける方法です。
[SRFI-235]{srfi.235
}
それぞれ、thunkが真の値を返す限り(while)、あるいは真の値を返すまで(until)、
繰り返しthunkを呼びつづけます。
[SRFI-235]{srfi.235
}
引数を無視して常に#t
を返す手続きです。
(constantly #t)
と同じです。
[SRFI-235]{srfi.235
}
引数を無視して常に#f
を返す手続きです。
(constantly #f)
と同じです。
註: boolean
は組み込みです (論理値参照)。