2011-12-14 10 views
-1

クロージャでこれをどのように評価するか。クロージャでの評価

私はあなたが何をしようとしていると、なぜあなたは、この関数のxml-EVALを命名しているかを正確にはわからない

(xml-eval '(item (itemname "some item") (price (% * 19.95 1.08)))) 

(xml-eval '(item (itemname "some item") (price 21.54)) 
+0

に見てみたいことがありますXML-evalの項目とitemNameにのためのDEFSは何ですか?私はこれを使って遊んでみたいですが、コードスニペットのコンテキストはありません。詳細を追加できますか? – octopusgrabbus

+0

clujureはscheme/racketのような評価をしています。 1行目を実行して2行目を返すようにしたい。 – riship89

+0

はい、evalはありますが、xml-evalはありません。私はevalでreplでそれを実行しようとしましたが、それはitemを悩ませます。 – octopusgrabbus

答えて

4

に評価されたいです。

しかし、ネストされたリストの束を取り、それらが含むコードの結果によってで始まるものを置き換える関数が必要になると思われます。だからこのようなものを使用したいかもしれません:

(defn xml-eval [x] 
     (if (coll? x) 
      (if (= (first x) '%) 
       (eval (rest x)) 
       (map xml-eval x)) 
      x)) 

それはあなたが欲しいと思うようです。

user=> (xml-eval '(item (itemname "some item") (price (% * 19.95 1.08)))) 
(item (itemname "some item") (price 21.546)) 

しかし、あなたはまた、unquoting

user=> `(item (itemname "some item") (price ~(* 19.95 1.08))) 
(user/item (user/itemname "some item") (user/price 21.546)) 
+0

どこから彼はxml-evalを取得しますか? – octopusgrabbus

+0

リストアイテムを(price(expression))としてXMLスタイルリストをとるxml-evalを定義したいと思います。その表現が評価されることを期待しています。 – riship89

+0

@alexadre:解決策をありがとう、clojure REPLで動作します。私はxml-evalを定義するためにそれをさらに進めたいと思います。手伝ってくれる。 – riship89