如何在clojure中评估这一点。
我想要
(xml-eval '(item (itemname "some item") (price (% * 19.95 1.08))))
评估为
(xml-eval '(item (itemname "some item") (price 21.54))
答案 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))