Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Clojure中将字符串转换为函数?_Clojure - Fatal编程技术网

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

如何在Clojure中将字符串转换为函数?,clojure,Clojure,我一直在研究,基本上是一个简化的中缀前缀算术计算器: (= 7 (__ 2 + 5)) 我按规定解决了问题。但这让我想知道——如果参数是作为字符串提供的——我该如何让它工作呢 (= 7 (__ "2 + 5")) 显然,我会从一个分割开始,然后咀嚼结果: (clojure.string/split "2 + 5" #"\s") user=> ["2" "+" "5"] 但是如何将“+”转换为函数调用呢?这是行不通的: ("+" 2 5) user=> java.lang.C

我一直在研究,基本上是一个简化的中缀前缀算术计算器:

(= 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 5)
user=>java.lang.ClassCastException:java.lang.String不能为空
投给clojure.lang.IFn

寻求启发….

查看解析函数

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

您可以使用
加载字符串
读取字符串
。这类似于common lisp中的
READ-FROM-STRING
,它遵循“代码就是数据”的原则,将字符串视为代码-计算并返回值

user=> (class (load-string "+"))
clojure.core$_PLUS_
user=> (read-string "+")
+
user=>
然后你可以简单地使用它