“展開” Common Lispの場合?
-
06-07-2019 - |
質問
私はSICPからかなりのスキームを学びましたが、今はCommon Lispにもっと興味があります。一般的なlispの fold
は reduce
であり、左または右の折りたたみのための特別な引数を持っていますが、 unfold
と同等のものは何ですか?グーグルはあまり役に立ちませんでした。実際、展開されていない印象を受けます???
解決
Common Lispには(loop ... collect ...)
があります。比較
(loop for x from 1 to 10 collect (* x x))
unfold
を使用した等価性:
(unfold (lambda (x) (> x 10)) (lambda (x) (* x x)) (lambda (x) (+ x 1)) 1)
一般的に、(unfold p f g seed)
は基本的に
(loop for x = seed then (g x) until (p x) collect (f x))
編集:タイプミスを修正
他のヒント
一般的なLispハイパースペックは unfold
関数を定義していませんが、独自に記述することは確かにできます。そのスキーム定義は、ほとんどシンボルをシンボルに変換します。
所属していません StackOverflow