2012-06-10 25 views
8

我一直在工作Clojure question 135 Infix Calculator,基本上是一個簡化的綴前綴算術計算器:如何將字符串轉換爲Clojure中的函數?

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

啓蒙追捧....

回答

14

看那決心功能

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

太好了,謝謝dAni! –

2

可以使用load-stringread-string。這就像普通的lisp中的READ-FROM-STRING一樣,它遵循'Code is Data'的原則,將字符串視爲代碼 - 評估並返回值。

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

那麼你可以簡單地使用它。

相關問題