% Function REDUCE
Function REDUCE
reduce
function sequence
&key key from-end start end initial-value => result
function - 引数なしか2つの引数を取る関数の指定子
sequences - 正常なシーケンス
key - 1つの引数を取る関数の指定子、またはnil
from-end - generalized-boolean、デフォルトはfalse
start, end - sequenceの境界インデックス指定子。
デフォルトはstart, endそれぞれ0
とnil
。
initial-value - オブジェクト
result - オブジェクト
reduce
は、functionで二項演算を行うために使われ、
sequenceのstard, endの境界内にある要素を結び付けます。
functionは、引数にsequenceの2つの要素か、 それらの要素が結合された結果を受け付ける必要があります。 functionはまた、引数なしも受け付けなければなりません。
もしkeyが与えられたとき、reduce
された値の展開に使われます。
key関数は、もしinitial-valueが与えられなかったとき、
sequenceの各要素に対して、reduce
の実行順に、正確に一度だけ適用されます。
key関数は通常sequenceの要素の、判定に使われる要素の部分を返却します。
もしkeyが与えられないか、あるいはnil
が指定されたとき、
sequenceの要素そのものが使われます。
reduce
は左結合で行われますが、
from-endがtrueのときは右結合です。
もしinitial-valueが与えられたとき、
それは論理的にサブシーケンスの前に配置され
(ただしfrom-endがtrueの場合は後に配置されます)
それを含めてreduce
操作が行われます。
通常の場合、reduce
の返却値は、
sequenceの要素の連続した組み合わせを
functionで適用した結果を組み合わせたものです。
もしサブシーケンスが正確にひとつの要素であり、
initial-valueが与えられていなかったときは、
その要素が返却され、functionは呼び出されません。
もしサブシーケンスが空であり、initial-valueが与えられらときは、
initial-valueが返却され、functionは呼び出されません。
もしサブシーケンスが空であり、initial-valueが与えられなかったときは、
functionは引数なしで呼び出され、
reduce
の返却値は、
どんな値であれfunctionの結果が返却されます。
functionが2つの引数ではない方法で呼び出されるのは、
この場合のみです。
(reduce #'* '(1 2 3 4 5)) => 120
(reduce #'append '((1) (2)) :initial-value '(i n i t)) => (I N I T 1 2)
(reduce #'append '((1) (2)) :from-end t
:initial-value '(i n i t)) => (1 2 I N I T)
(reduce #'- '(1 2 3 4)) == (- (- (- 1 2) 3) 4) => -8
(reduce #'- '(1 2 3 4) :from-end t) ;Alternating sum.
== (- 1 (- 2 (- 3 4))) => -2
(reduce #'+ '()) => 0
(reduce #'+ '(3)) => 3
(reduce #'+ '(foo)) => FOO
(reduce #'list '(1 2 3 4)) => (((1 2) 3) 4)
(reduce #'list '(1 2 3 4) :from-end t) => (1 (2 (3 4)))
(reduce #'list '(1 2 3 4) :initial-value 'foo) => ((((foo 1) 2) 3) 4)
(reduce #'list '(1 2 3 4)
:from-end t :initial-value 'foo) => (1 (2 (3 (4 foo))))
なし。
なし。
sequenceが正常なシーケンスでないとき、
型type-error
のエラーを通知する準備をしなければなりません。
3.6. 横断の規則と副作用
なし。