質問

私は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 関数を定義していませんが、独自に記述することは確かにできます。そのスキーム定義は、ほとんどシンボルをシンボルに変換します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top