1
我正在處理4clojure's Prime Numbers kata。我的解決方案在我的本地機器上完美運行 (如果效率低下),但它依賴defn
,這是 在4輪上禁止的。重構clojure`defn`到`fn`會導致ClassCastException
(defn factors [n]
(->> n
range
(map inc)
(filter #(zero? (mod n %)))))
(defn prime? [n]
(->> (factors n)
(count)
(= 2)))
(defn n-primes [n]
(->> (range)
(filter prime?)
(take n)))
我試圖重構它只使用匿名函數,但它爆炸了。
(fn x-primes [count]
(let [x-factors (fn factors [n] (->> n range (map inc) (filter #(zero? (mod n %)))))
x-prime? (fn [n] (->> (x-factors n) (count) (= 2)))]
(->> (range)
(filter x-prime?)
(take count))))
拋出下面的錯誤時(本地和與4clojure的編輯器中運行)
ClassCastException異常java.lang.Long中不能轉換到clojure.lang.IFn
有什麼我在重構代碼時做錯了嗎?
在旁邊,你爲什麼假設4cljure禁令def
和defn
?
具體在哪裏? – Carcigenicate
你如何運行它? – Carcigenicate
本地運行時的蘋果酒。我正在評估編輯器的s-exp(雖然fn已改爲defn),然後用蘋果酒中的'(x-primes 5)'調用它。 –