【问题标题】:"unfold" for common lisp?普通lisp的“展开”?
【发布时间】:2010-12-10 01:03:49
【问题描述】:

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

【问题讨论】:

    标签: lisp scheme common-lisp reduce fold


    【解决方案1】:

    Common Lisp 有(loop ... collect ...)。比较

    (循环从 1 到 10 收集 x (* x x))

    使用unfold

    (展开(λ(x)(> x 10)) (λ (x) (* x x)) (λ (x) (+ x 1)) 1)

    一般来说(unfold p f g seed)基本是

    (循环x =种子然后(g x)直到(p x)收集(f x))

    编辑:修正错字

    【讨论】:

    • 嗯,这很有趣。在过去的一个小时里,我一直在玩循环:P 它很棒!我喜欢编程语言有这些嵌入的子语言,它们有自己的语法和一套可以理解的规则,比如格式字符串。循环是强大的东西!
    【解决方案2】:

    common lisp hyperspec 没有定义unfold 函数,但您当然可以编写自己的函数。它的方案定义几乎是一个符号一个符号地翻译。

    【讨论】:

    • 谢谢。这很不幸,但我想是的,我会自己写。我真的很喜欢这样纯粹并具有如此美丽的功能优点的方案,但我有点听天由命地学习纠结但富有表现力的普通 lisp。这有点像学习英语而不是世界语,你知道吗?
    猜你喜欢
    • 2011-01-21
    • 2015-11-13
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多