You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:31:09