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

Clojure中使用-x对参数取反报错Unable to resolve symbol: -x in this context的原因咨询

为什么Clojure里不能直接用-x对参数取反?

这个错误的核心原因是Clojure的**前缀表达式(波兰表达式)**语法规则——所有的操作(包括数学运算)都必须以函数调用的形式书写,操作符要放在参数前面,而不是像Java、Python这类语言那样用中缀或后缀的写法。

你写的-x会被Clojure当成一个单独的符号(symbol)来解析,它会去查找有没有名为-x的变量或函数,自然找不到,所以就抛出了Unable to resolve symbol: -x in this context的错误。

正确的取反写法应该是把负号作为函数,把x作为参数传进去,也就是:

(defn my-fun [x] (println (- x)))

举个简单的类比:其他语言里的x + 5,在Clojure里要写成(+ x 5);x * 3要写成(* x 3),取反本质上也是一样的逻辑——-是一个可以接受1个参数的函数,用来对数值取反。

另外补充一点:如果是x - 5这种减法操作,Clojure里就是(- x 5),这时候-函数接受两个参数做减法运算,它是支持多态的,会根据参数数量不同执行不同的逻辑。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:17:41