【发布时间】:2013-02-22 17:21:03
【问题描述】:
由于对 clojure 完全没有经验,而且自大学以来没有任何函数式编程实践,我试图解释一些示例代码以找出 clojure 语法。
我开始编写几个版本的斐波那契 (https://gist.github.com/pcalcao/ea4176719d778ea3ab9e),但我仍然不能说我完全理解更复杂的形式。
例如,这个:
(defn fib_map [n]
(last (take (+ n 1)
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))))
我很难真正理解这段代码的最深处:
fn [[a b]] [b (+ a b)]
现在,根据我的理解,我们正在创建一个匿名函数,它接收一个参数,一个具有两个值的向量(这是解构,对吗?),并返回另一个向量。
现在,我们这样做的原因是什么,而不是:
fn [a b] [b (+ a b)]
这些是等价的吗?还是我们只是让我们的匿名函数接收一个参数作为“噱头”以在iterate 中使用?
很抱歉,这很明显,但就像我说的,类似 Lisp 的语言还不是我的强项。
【问题讨论】:
标签: clojure