我试图理解的代码由两个函数组成:
(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]向量植入的迭代函数,但是我对map和first函数感到困惑。
我知道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-step
is的输出[f_{n+1} f_{n+2}]
。该f_{n+1}
术语已被重复。此外,输出是成对的。
您真正想要的是每对中的第一对。
如何获得第一个? first
您如何在成对的序列中做到这一点? map
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句