在Clojure中使用斐波那契生成器的这种有趣实现实现。有点难以理解的自我参考部分。对心理建模的任何帮助将非常有用。
backgroundImage: {
flex: 1,
resizeMode: 'cover',
width: Dimensions.get('window').width,
height: Dimensions.get('window').height
},
答案 0 :(得分:2)
宏观展开(lazy-cat [0 1] (map + (rest fib-seq) fib-seq)
会导致:
(concat (lazy-seq [0 1]) (lazy-seq (map + (rest fib-seq) fib-seq)))
(map + coll1 coll2)
返回一个新集合,其中第一个列表的第一项添加到第二个列表的第一项,第一个列表的第二项添加到第二个列表的第二项,并且等等。
user> (map + [1 2 3 4] [1 2 3 4])
(2 4 6 8)
因此,我们从0和1开始,然后将fib-seq
(1)的其余部分中的第一个移到fib-seq
(0)的第一个元素中,得出1。然后,我们再次获得fib-seq
的下一个元素,即我们刚意识到的1
,并将其添加到fib-seq
(2)的第二项中,该项的结果为2,并且等等。
因此,我们懒惰地将[0 1]合并为将两个集合按1偏移后求和的结果。
[0 1] <+ concat>
[1 + 0
1 + 1
2 + 1
3 + 2
...]
user> (take 10 fib-seq)
(0 1 1 2 3 5 8 13 21 34)
希望这会有所帮助。