Next: srfi.238 - コードセット, Previous: srfi.232 - 柔軟なカリー化された手続き, Up: ライブラリモジュール - SRFI [Contents][Index]
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} Returns a procedure that works, when applied to arguments, applies each proc on the arguments in turn. The result of procs are discarded.
(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}
Returns a procedure that takes one argument, a list.
The returned procedure tries to apply pred to each element
of list in turn.
If pred returns #f, immediately returns #f. Otherwise,
returns the last result of pred. If the returned procedure
is applied to an empty list, #t is returned.
The following equivalence holds:
((all-of pred) list) ≡ (every pred list)
[SRFI-235]{srfi.235}
Returns a procedure that takes one argument, a list.
The returned procedure applies pred to each element
of list in turn.
If pred returns a true value, immediately returns it. Otherwise,
returns #f. If the returned procedure
is applied to an empty list, #f is returned.
The following equivalence holds:
((any-of pred) list) ≡ (any pred list)
[SRFI-235]{srfi.235}
Returns a procedure such that (apply (on reducer mapper) args)
works as if (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は組み込みです (論理値参照)。
Next: srfi.238 - コードセット, Previous: srfi.232 - 柔軟なカリー化された手続き, Up: ライブラリモジュール - SRFI [Contents][Index]