如何将字符串转换为Clojure中的函数?

时间:2012-06-10 10:08:54

标签: clojure

我一直在研究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>

启蒙寻求......

2 个答案:

答案 0 :(得分:15)

查看解析功能

((resolve (symbol "+")) 1 2)

答案 1 :(得分:2)

您可以使用load-stringread-string。这就像常见的lisp中的READ-FROM-STRING一样,遵循'Code is Data'的原则,将字符串视为代码 - 评估并返回值。

user=> (class (load-string "+"))
clojure.core$_PLUS_
user=> (read-string "+")
+
user=>

那么你可以简单地使用它。