Tôi đang cố gắng tự dạy mình clojure và tôi đang sử dụng các nguyên tắc của các yếu tố chính Kata và TDD để làm như vậy.Đón lại Clojure với các yếu tố chính
Qua một loạt các xét nghiệm Midje như thế này:
(fact (primefactors 1) => (list))
(fact (primefactors 2) => (list 2))
(fact (primefactors 3) => (list 3))
(fact (primefactors 4) => (list 2 2))
tôi đã có thể để tạo ra các chức năng sau:
(defn primefactors
([n] (primefactors n 2))
([n candidate]
(cond (<= n 1) (list)
(= 0 (rem n candidate)) (conj (primefactors (/ n candidate)) candidate)
:else (primefactors n (inc candidate))
)
)
)
này hoạt động tuyệt vời cho đến khi tôi ném bài kiểm tra trường hợp cạnh sau vào nó:
(fact (primefactors 1000001) => (list 101 9901))
Tôi kết thúc với lỗi tràn ngăn xếp. Tôi biết tôi cần phải biến điều này thành một vòng lặp lại thích hợp nhưng tất cả các ví dụ mà tôi thấy có vẻ quá đơn giản và chỉ trỏ đến biến số truy cập hoặc số làm trọng tâm. Làm thế nào để làm cho đệ quy này?
Cảm ơn!
Wow. Đây là lần đầu tiên tôi nhìn thấy ai đó viết Lisp người thực sự đưa ra) dòng riêng của họ: P –