2012-06-10 18 views
8

私は基本的に、Clojure question 135 Infix Calculatorに算術計算の前に付けるために簡略化中置を取り組んできました:文字列をClojureの関数に変換するには?

(= 7 (__ 2 + 5)) 

指定されたとおり、私は問題を解決しました。しかし、それは私には不思議に思っています - 引数が文字列として提供されていたらどうしたらうまくいくのでしょうか?

(clojure.string/split "2 + 5" #"\s") 
user=> ["2" "+" "5"] 

をしかし、どのように私は、関数呼び出しに「+」に変換します:

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

もちろん、私はを分割し、その結果によってムンクで始まるだろうか?これは、仕事に行くされていません。

("+" 2 5) 
user=> java.lang.ClassCastException: java.lang.String cannot be 
cast to clojure.lang.IFn <snip> 

啓発はあなたがload-stringread-stringを使用することができます解決機能

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

答えて

14

ルックを求めました。これは、Code is Dataの原則を遵守し、文字列をコードとして扱い、評価して値を返すような共通のlispのREAD-FROM-STRINGのようなものです。

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

あなたは単純に使用できます。

+0

よろしくお願い致します。 –

関連する問題