Vous avez raison. La fonction ...
(fn [[i1 i2]] [i2 (+ i1 i2)])
... produit une paire de nombres d'un autre. Par exemple,
((fn [[i1 i2]] [i2 (+ i1 i2)]) [6 19])
; [19 25]
Son iterate
qui produit la séquence, en appliquant de façon répétée la fonction. On obtient ainsi une séquence de paires:
(iterate (fn [[i1 i2]] [i2 (+' i1 i2)]) [1 1])
;([1 1] [1 2] [2 3] [3 5] [5 8] [8 13] [13 21] ...)
Le premier ou le second éléments de ces paires forment une séquence de Fibonacci, selon l'endroit où vous voulez commencer.Pour obtenir l'ancien, nous venons envelopper ci-dessus dans (map first ...)
: Bien que cette question est très
(map first (iterate (fn [[i1 i2]] [i2 (+' i1 i2)]) [1 1]))
;(1 1 2 3 5 8 13 21 ...)
Si vous êtes familier avec le ->>
macro filetage, vous trouverez peut-être plus facile à lire comme
(->> [1 1]
(iterate (fn [[i1 i2]] [i2 (+ i1 i2)]))
(map first))
;(1 1 2 3 5 8 13 21 ...)
Je pense que ce n'est pas tout à fait en double parce que c'est plus spécifique. –
Il semble confus en raison de la mauvaise indentation. On dirait que le corps de la fonction interne et le second argument de 'itérer' sont au même niveau. – Svante
Correction de la mise en forme –