普通的lisp"展开"?

nul*_*ter 9 lisp reduce scheme common-lisp fold

我从SICP学到了很多方案,但现在对普通的lisp更感兴趣.我知道普通的lisp foldreduce,有左或右折叠的特殊参数,但是相当于unfold什么?谷歌搜索没有多大帮助.事实上,我得到的印象是没有展开???

hua*_*uan 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))

编辑:修复拼写错误

  • 嗯这很有趣.过去一小时我一直在玩循环:P很棒的东西!我喜欢当编程语言有这些小类嵌入式子语言时,这些子语言有自己的语法和规则集来理解,比如格式字符串.循环是强大的东西! (2认同)
  • 欢迎来到黑暗边. (2认同)