Newbie Clojure вопрос. Каковы плюсы и минусы следующих двух способов реализации/представления последовательности Фибоначчи? (В частности, есть все, чтобы полностью исключить один или другой как плохая идея.)Clojure seq return function vs direct 'def' of seq
(ns clxp.fib
(:gen-class))
; On the one hand, it seems more natural in code to have a function that
; returns 'a' Fibonacci sequence.
(defn fib-1
"Returns an infinite sequence of Fibonnaci numbers."
[]
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))
; > (take 10 (fib-1))
; (0 1 1 2 3 5 8 13 21 34)
; On the other hand, it seems more mathematically natural to define 'the'
; Fibonacci sequence once, and just refer to it.
(def fib-2
"The infinite sequence of Fibonnaci numbers."
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))
; > (take 10 fib-2)
; (0 1 1 2 3 5 8 13 21 34)
а) Каковы плюсы и минусы этих двух подходов к определению бесконечную последовательность? (Я знаю, что это несколько особый случай в том, что эта конкретная последовательность не требует никаких аргументов - в отличие, скажем, от бесконечной последовательности кратных «n», которая, по моему мнению, потребует первого подхода, чтобы указать значение «n».)
b) Есть ли какая-либо чрезмерная причина, чтобы предпочесть одну из этих реализаций другой? (Потребление памяти, применимость при использовании в качестве аргумента и т. Д.)
Я бы определил 'fib-1', чтобы получить его независимо, а затем, если вы решите, что вам нужен экземпляр, не содержащий мусор, вы можете определить' fib-2' в терминах 'fib-1' 'as' (def fib-2 (fib-1)) '. –
Возможно, дубликат: http://stackoverflow.com/questions/2214258/holding-onto-the-head-of-a-sequence – ClojureMostly