npt-japanese

% Function REDUCE

UP


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それぞれ0nil
initial-value - オブジェクト
result - オブジェクト

定義

reduceは、functionで二項演算を行うために使われ、 sequencestard, endの境界内にある要素を結び付けます。

functionは、引数にsequenceの2つの要素か、 それらの要素が結合された結果を受け付ける必要があります。 functionはまた、引数なしも受け付けなければなりません。

もしkeyが与えられたとき、reduceされた値の展開に使われます。 key関数は、もしinitial-valueが与えられなかったとき、 sequenceの各要素に対して、reduceの実行順に、正確に一度だけ適用されます。 key関数は通常sequenceの要素の、判定に使われる要素の部分を返却します。 もしkeyが与えられないか、あるいはnilが指定されたとき、 sequenceの要素そのものが使われます。

reduceは左結合で行われますが、 from-endtrueのときは右結合です。

もしinitial-valueが与えられたとき、 それは論理的にサブシーケンスの前に配置され (ただしfrom-endtrueの場合は後に配置されます) それを含めて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. 横断の規則と副作用

備考

なし。


TOP, Github