我从SICP学到了一些scheme知识,但现在更感兴趣的是common lisp。我知道common lisp的fold
是reduce
,有左折叠或右折叠的特殊参数,但是unfold
的等效方法是什么?谷歌搜索并没有帮助太多。实际上,我得出的印象是没有unfold
???
我从SICP学到了一些scheme知识,但现在更感兴趣的是common lisp。我知道common lisp的fold
是reduce
,有左折叠或右折叠的特殊参数,但是unfold
的等效方法是什么?谷歌搜索并没有帮助太多。实际上,我得出的印象是没有unfold
???
通用Lisp有(loop ... collect ...)
。与其等效地使用unfold
进行比较:
(loop for x from 1 to 10 collect (* x x))
相当于:
(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))
编辑:修正错别字
unfold
函数,但是你可以自己编写。它的Scheme定义几乎一字不差。