Макроэкспандирование (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
(1), который приводит к 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)
Надеюсь, это поможет.