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
相关产品推荐
相关产品推荐

