我一直在研究Clojure question 135 Infix Calculator,基本上是一个简化的中缀算术计算器:
(= 7 (__ 2 + 5))
我按规定解决了问题。但这让我感到疑惑 - 如果这个论点是作为一个字符串提供的话 - 我怎么能让它起作用呢?
(= 7 (__ "2 + 5"))
显然我会从拆分开始,然后勉强完成结果:
(clojure.string/split "2 + 5" #"\s")
user=> ["2" "+" "5"]
但是如何将“+”转换为函数调用?这不起作用:
("+" 2 5)
user=> java.lang.ClassCastException: java.lang.String cannot be
cast to clojure.lang.IFn <snip>
启蒙寻求......
答案 0 :(得分:15)
查看解析功能
((resolve (symbol "+")) 1 2)
答案 1 :(得分:2)
您可以使用load-string
或read-string
。这就像常见的lisp中的READ-FROM-STRING
一样,遵循'Code is Data'的原则,将字符串视为代码 - 评估并返回值。
user=> (class (load-string "+"))
clojure.core$_PLUS_
user=> (read-string "+")
+
user=>
那么你可以简单地使用它。