普通的lisp“展开”?

时间:2009-10-26 05:42:12

标签: lisp scheme common-lisp reduce fold

我从SICP学到了很多计划,但现在对普通的lisp更感兴趣。我知道常见的lisp foldreduce,左侧或右侧折叠的特殊参数,但是unfold的等价物是什么?谷歌搜索没有多大帮助。事实上,我得到的印象是没有展开???

2 个答案:

答案 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函数,但你可以编写自己的函数。它的方案定义几乎转换为符号的符号。