もう一つの再帰パターンは、accumulate パターンと呼ばれます。accumulate
再帰パターンでは、リストの各要素に対して処理が行われ、その処理結果が他の要素に対する処理結果と累積されます。
これは、consを用いたeveryパターンに非常によく似ていますが、consではなく別のコンバイナーが使われている点が異なります。
パターンは以下の通りです:
+ やその他の結合関数を用いて、~と結合します。
以下に例を示します。
(defun add-elements (numbers-list)
"Add the elements of NUMBERS-LIST together."
(if (not numbers-list)
0
(+ (car numbers-list) (add-elements (cdr numbers-list)))))
(add-elements '(1 2 3 4))
⇒ 10
accumulateパターンの例については、ファイル一覧の作成を参照してください。