10

私はClojureの質問135InfixCalculatorに取り組んできました。これは、基本的に、算術計算機に接頭辞を付けるための単純化された中置です。

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

悟りを求めた…。

4

2 に答える 2

17

解決機能を見てください

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

load-stringまたはを使用できますread-stringREAD-FROM-STRINGこれは、「Code is Data」の原則に準拠し、文字列をコードとして扱い、値を評価して返す一般的なlispのようなものです。

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

その後、単にそれを使用することができます。

于 2012-07-12T10:31:12.830 に答える