質問
の コンピュータープログラムの構造と解釈 (SICP) セクション2.2.3 いくつかの関数は以下を使用して定義されています。
(accumulate cons nil
(filter pred
(map op sequence)))
これを使用する2つの例は、フィボナッチ数のリストで動作します。 even-fibs
と list-fib-squares
.
蓄積、フィルター、マップ機能は、セクション2.2でも定義されています。私を混乱させている部分は、著者が accumulate
ここ。 accumulate
3つのパラメーターを取得します:
適用されるバイナリ関数
関数の右端パラメーターとして使用される初期値
関数が適用されるリスト
本の定義を使用して、リストに蓄積を適用する例:
(accumulate cons nil (list 1 2 3))
=> (cons 1 (cons 2 (cons 3 nil)))
=> (1 2 3)
3番目のパラメーターはリストであるため、 (accumulate cons nil some-list)
戻ってきます some-list
, 、およびこの場合、 (filter pred (map op sequence))
リストです。
この使用の理由はありますか accumulate
セクション内の他の同様の構造化された関数との一貫性以外は?
解決
これらの2つの用途が確信しています accumulate
「リストを構築するための要素を確認する」は、「製品を取得するために数字を掛ける」または「合計数値を合計する」缶を取得するのと同じ方法で蓄積プロセスとして扱うことができるという事実を単に示しています。蓄積が事実上無作法であることは正しいです。
(さて:これは、の出力が filter
との入力 accumulate
リストではありませんでした。たとえば、それが怠lazially生成されたシーケンスを表している場合。)
所属していません StackOverflow