Clojure函数执行println时抛类型转换异常?如何保留结构并修正?
问题解决方法
报错的原因是两处Clojure语法细节错误:
- 函数里的
(0)写法违规:Clojure中括号用于函数调用,你把数值0用括号括起来,相当于试图把0当作函数执行,这就触发了「Long不能转成IFn」的类型转换异常,直接写0即可。 - 外部的
let未加外层括号:Clojure里所有特殊形式(包括let)都必须包裹在括号里,否则会被当作符号处理,导致语法逻辑错误。
修改后的代码完全保留了你原本的函数结构,可正常运行:
(defn sumTerm [hi lo] (if (< hi lo) 0 ;; 移除多余的括号 (let [ terms (quot hi lo) tb (+ terms 1) ] (quot (* lo terms tb) 2) ) )) ;; 给let添加外层括号,构成完整可执行的表达式 (let [ ln 27 a (sumTerm ln 4) b (sumTerm ln 7) abc (- (+ a b) (sumTerm ln 28)) ] (println " abc= "(str abc)) )
内容的提问来源于stack exchange,提问作者MERLIN
相关产品推荐
相关产品推荐

