java.lang.ClassCastException: java.lang.Long 无法转换为 clojure.lang.IFn
java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
这是我的第一个问题,希望您能帮助我。
我正在用 clojure 编写一个合并函数。我在 tryclojure 上测试我的代码并在标题中得到错误。
这是我的代码
(def merge
(fn [lon1 lon2]
{:pre[(every? number? lon1)(every? number? lon2)]
:post[(every? number? %)]}
(cond
(empty? lon1) lon2
(empty? lon2)lon1
:else
(cons (min (first lon1) (first lon2))
(merge (rest lon1) (rest lon2))))))
#'sandbox7750/merge
> (merge (1,2,5) (3,4))
java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
那么,这里的问题是什么?期待答案:)
问候
首先你需要引用列表,否则它们会被评估并且它们的第一个元素被视为要调用的函数,因此异常:
(1,2,5)
;; => java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
引用将帮助您获得包含数字的列表:
'(1,2,5)
;; => (1 2 5)
不使用元素分隔符(如,
)也更符合习惯,你可以看到上面打印的表格((1 2 5)
)。
这似乎是一个练习,我会让你修复 merge
函数中的其他问题。
正确的调用是 (merge '(1 2 3) '(4 5)) 或 (merge [1 2 3] [4 5]) (逗号是可选的)。当您编写未引用列表 (1,2,3) 时,第一个元素被视为函数。 1 不是函数,您收到错误消息。
这是我的第一个问题,希望您能帮助我。 我正在用 clojure 编写一个合并函数。我在 tryclojure 上测试我的代码并在标题中得到错误。
这是我的代码
(def merge
(fn [lon1 lon2]
{:pre[(every? number? lon1)(every? number? lon2)]
:post[(every? number? %)]}
(cond
(empty? lon1) lon2
(empty? lon2)lon1
:else
(cons (min (first lon1) (first lon2))
(merge (rest lon1) (rest lon2))))))
#'sandbox7750/merge
> (merge (1,2,5) (3,4))
java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
那么,这里的问题是什么?期待答案:)
问候
首先你需要引用列表,否则它们会被评估并且它们的第一个元素被视为要调用的函数,因此异常:
(1,2,5)
;; => java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
引用将帮助您获得包含数字的列表:
'(1,2,5)
;; => (1 2 5)
不使用元素分隔符(如,
)也更符合习惯,你可以看到上面打印的表格((1 2 5)
)。
这似乎是一个练习,我会让你修复 merge
函数中的其他问题。
正确的调用是 (merge '(1 2 3) '(4 5)) 或 (merge [1 2 3] [4 5]) (逗号是可选的)。当您编写未引用列表 (1,2,3) 时,第一个元素被视为函数。 1 不是函数,您收到错误消息。