clojure.lang.PersistentList不能强制转换为clojure.lang.IFn
您好,我正在尝试返回前N个斐波那契数的列表。我已使用非匿名函数成功实现了此功能:clojure.lang.PersistentList不能强制转换为clojure.lang.IFn,clojure,Clojure,您好,我正在尝试返回前N个斐波那契数的列表。我已使用非匿名函数成功实现了此功能: (defn nth-fibo [i] (cond (= i 1) 1 (= i 2) 1 :else (+ (nth-fibo (- i 1)) (nth-fibo (- i 2))))) (defn fibos [i] (loop [x i] (when (> x 0) (cons (nth-fibo x) (fibos (- x 1)))))) (r
(defn nth-fibo [i]
(cond
(= i 1) 1
(= i 2) 1
:else (+ (nth-fibo (- i 1)) (nth-fibo (- i 2)))))
(defn fibos [i]
(loop [x i]
(when (> x 0)
(cons (nth-fibo x) (fibos (- x 1))))))
(reverse (fibos 5))
但是,我必须为4Clojure evaluator提供一个可调用的函数才能通过测试。我的尝试是:
#(
(letfn [
(nth-fibo [i]
(cond
(= i 1) 1
(= i 2) 1
:else (+ (nth-fibo (- i 1)) (nth-fibo (- i 2)))))
(fibos [i]
(loop [x i]
(when (> x 0)
(cons (nth-fibo x) (fibos (- x 1))))))
]
(reverse (fibos %))))
导致错误的原因:
java.lang.ClassCastException:clojure.lang.PersistentList不能为空
投给clojure.lang.IFn
在匿名函数的周围有一组额外的括号,这是导致问题的原因。看看这是否有效:
#(letfn [(nth-fibo [i]
(cond
(= i 1) 1
(= i 2) 1
:else (+ (nth-fibo (- i 1)) (nth-fibo (- i 2)))))
(fibos [i]
(loop [x i]
(when (> x 0)
(cons (nth-fibo x) (fibos (- x 1))))))]
(reverse (fibos %)))
同一期的小型复制品:
#(str %)
=> #object[playground.so$eval1751$fn__1752 0x718c0dd5 "playground.so$eval1751$fn__1752@718c0dd5"]
(*1 1)
=> "1"
#((str %))
=> #object[playground.so$eval1767$fn__1768 0x5375a819 "playground.so$eval1767$fn__1768@5375a819"]
(*1 1)
ClassCastException java.lang.String cannot be cast to clojure.lang.IFn playground.so/eval1767/fn--1768 (so.clj:21)
在匿名函数的周围有一组额外的括号,这是导致问题的原因。看看这是否有效:
#(letfn [(nth-fibo [i]
(cond
(= i 1) 1
(= i 2) 1
:else (+ (nth-fibo (- i 1)) (nth-fibo (- i 2)))))
(fibos [i]
(loop [x i]
(when (> x 0)
(cons (nth-fibo x) (fibos (- x 1))))))]
(reverse (fibos %)))
同一期的小型复制品:
#(str %)
=> #object[playground.so$eval1751$fn__1752 0x718c0dd5 "playground.so$eval1751$fn__1752@718c0dd5"]
(*1 1)
=> "1"
#((str %))
=> #object[playground.so$eval1767$fn__1768 0x5375a819 "playground.so$eval1767$fn__1768@5375a819"]
(*1 1)
ClassCastException java.lang.String cannot be cast to clojure.lang.IFn playground.so/eval1767/fn--1768 (so.clj:21)