私は4clojure's Prime Numbers kataで作業しています。私は完全にローカルマシン上で (効率的でない場合)機能するソリューションを持っていますが、それはdefn
に依存しています。これは4clojureで禁止された です。`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
ローカルで実行しているときのサイダー。私は私の編集者(fnがdefnに変更されたにもかかわらず)からs-expを評価していました。そしてそれをサイダーの '(x-primes 5)'で呼び出しました。 –