我从SICP学到了很多计划,但现在对普通的lisp更感兴趣。我知道常见的lisp fold
是reduce
,左侧或右侧折叠的特殊参数,但是unfold
的等价物是什么?谷歌搜索没有多大帮助。事实上,我得到的印象是没有展开???
答案 0 :(得分:13)
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))
编辑:修复拼写错误
答案 1 :(得分:3)
常见的lisp hyperspec没有定义unfold
函数,但你可以编写自己的函数。它的方案定义几乎转换为符号的符号。