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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top