Tôi là một người mới đến clojure, những người muốn xem tất cả những gì phiền phức. Tìm cách tốt nhất để có được một cảm giác cho nó là viết một số mã đơn giản, tôi nghĩ tôi sẽ bắt đầu với một hàm Fibonacci.một hàm Fibonacci đệ quy trong Clojure
nỗ lực đầu tiên của tôi là:
(defn fib [x, n]
(if (< (count x) n)
(fib (conj x (+ (last x) (nth x (- (count x) 2)))) n)
x))
Để sử dụng này, tôi cần để gieo rắc x với [0 1] khi gọi hàm. Câu hỏi của tôi là, không bao bọc nó trong một hàm riêng biệt, có thể viết một hàm duy nhất chỉ lấy số lượng các phần tử cần trả về không?
Làm một số đọc xung quanh dẫn tôi đến một số những cách tốt hơn để đạt được các funcionality cùng:
(defn fib2 [n]
(loop [ x [0 1]]
(if (< (count x) n)
(recur (conj x (+ (last x) (nth x (- (count x) 2)))))
x)))
và
(defn fib3 [n]
(take n
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1]))))
Dù sao, hơn vì lợi ích của tập thể dục hơn bất cứ điều gì khác, có thể bất cứ ai giúp tôi với một phiên bản tốt hơn của một hàm Fibonacci hoàn toàn đệ quy? Hoặc có lẽ chia sẻ một chức năng tốt hơn/khác nhau?
fib3 là Clojure'ish nhất trong số này –