了解Clojure中的这些斐波那契函数

塞缪尔

我试图理解的代码由两个函数组成:

(defn fib-step [[a b]]
  [b (+ a b)])

我很确定我已经弄清楚了。它使用宏(defn)创建一个命名函数(fib-step),该函数需要n个参数。然后,将这些自变量分解为两个变量a和b。它首先返回一个包含b的向量,第二个返回a和b的加法。

我现在正尝试通过此功能:

(defn fib-seq []
  (map first (iterate fib-step [0 1])))

同样,它使用宏来创建命名函数fib-seq。我想我了解[0 1]向量植入的迭代函数,但是我对mapfirst函数感到困惑

我知道map需要同时包含一个函数和一个序列,所以为什么要使用“ first”?

我为什么不能写

(take 5 (iterate fib-step [0 1]))

要获得延迟序列中的前5个数字?地图的首要目的是什么?

抱歉,这样的基本问题:(

韦伯

使用REPL:

(take 5 (iterate fib-step [0 1]))
;=> ([0 1] [1 1] [1 2] [2 3] [3 5])

那是你想要的吗?不,输入[f_n f_{n+1}]fib-stepis的输出[f_{n+1} f_{n+2}]f_{n+1}术语已被重复。此外,输出是成对的。

您真正想要的是每对中的第一对。

如何获得第一个? first

您如何在成对的序列中做到这一点? map

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章