在clojure中评估

时间:2011-12-14 20:27:04

标签: clojure

如何在clojure中评估这一点。

我想要

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

评估为

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

1 个答案:

答案 0 :(得分:4)

我不确定你要做什么以及为什么要命名这个函数xml-eval。

但似乎你需要一个带有一堆嵌套列表的函数,并用它们包含的代码的结果替换以开头的那些。所以你可能想要使用这样的东西:

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