我刚刚学习 clojure,我遇到了困难。
我正在尝试将算术表达式读取为中缀字符串并在 Clojure 中对其进行处理。
例如“1 + 2” -> (+ 1 2)
我读入“+”并将其变成这样的符号:
(def plus (symbol "clojure.core" "+"))
这似乎工作正常,但是当我调用它时,我没有得到我所期望的:
user=> plus
+
user=> (plus 1 1)
1
user=> (plus 1 2)
2
user=> (plus 1 2 3)
ArityException Wrong number of args (3) passed to: Symbol clojure.lang.AFn.throwArity (AFn.java:437)
我在这里缺少什么?
默认情况下,符号具有附加的功能。默认情况下附加到它们的功能是在地图中查找此键。这就是为什么你的 plus 表现得很奇怪。它正在尝试在地图中查找元素。
(plus 1 1)
这实际上是在地图 1 中查找符号 + ,如果没有找到,则返回默认值 1。
(plus 1 2)
与上面相同,但默认值为 2。
符号的 Clojure 文档 http://clojure.org/data_structures#Data%20Structures-Symbols
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)