10

我一直在研究Clojure 问题 135 Infix Calculator,基本上是前缀算术计算器的简化中缀:

(= 7  (__ 2 + 5))

我按照规定解决了问题。但这让我想知道——如果参数是作为字符串提供的——我将如何让它工作?

(= 7  (__ "2 + 5"))

显然我会从split开始,然后仔细研究结果:

(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>

寻求启蒙......

4

2 回答 2

17

看解析函数

((resolve (symbol "+")) 1 2)
于 2012-06-10T10:13:15.143 回答
2

您可以使用load-stringread-string。这有点像READ-FROM-STRING普通的 lisp,它遵循“代码即数据”的原则,将字符串视为代码 - 评估并返回值。

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

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

于 2012-07-12T10:31:12.830 回答