“展开”对于普通的lisp?
-
06-07-2019 - |
题
我从SICP学到了很多计划,但现在对普通的lisp更感兴趣。我知道常见的lisp的 fold
是 reduce
,有左或右折叠的特殊参数,但是展开
的等价物是什么?谷歌搜索没有多大帮助。事实上,我得到的印象是没有展开???
解决方案
Common Lisp有(loop ... collect ...)
。比较
(loop for x from 1 to 10 collect (* x x))
使用展开
的等价:
(unfold (lambda (x) (> x 10)) (lambda (x) (* x x)) (lambda (x) (+ x 1)) 1)
一般来说,(展开种子)
基本上是
(loop for x = seed then (g x) until (p x) collect (f x))
编辑:修复拼写错误
其他提示
常见的lisp hyperspec没有定义展开
函数,但你可以编写自己的函数。它的方案定义几乎转换为符号的符号。
不隶属于 StackOverflow