나는 4clojure's Prime Numbers kata에서 작업 중입니다. 내 로컬 컴퓨터에서 완벽하게 작동하는 솔루션을 (비효율적 인 경우) 가지고 있지만 defn
에 의존합니다. 은 4clojure에서 금지되어 있습니다.`fn`에서`defn`을 리팩토링하면 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) '를 호출했습니다. –