在clojure中完全没有经验,并且自大学以来没有任何函数式编程习惯,我试图解释一些示例代码来找出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的语言不是我的强项。
接受更详细的解释。此外,*向量的前两个值使我意识到,如果我通过一个更多的元素,其余的将被忽略,我不知道!尼斯。 – pcalcao 2013-03-07 13:50:24