在clojure中评估

在clojure中评估,clojure,Clojure,如何在clojure中对此进行评估 我想要 (xml-eval '(item (itemname "some item") (price (% * 19.95 1.08)))) 评估 (xml-eval '(item (itemname "some item") (price 21.54)) 我不太清楚您想做什么,以及为什么要将此函数命名为xml eval 但您似乎需要一个函数,该函数接受一组嵌套列表,并将以%开头的列表替换为它们包含的代码的结果。因此,您可能需要使用以下内容: (defn

如何在clojure中对此进行评估

我想要

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

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

我不太清楚您想做什么,以及为什么要将此函数命名为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))
但你也可能想调查一下


xml eval item和itemname的定义是什么?我很想处理这个问题,但是没有代码snippit的上下文。你能补充更多的细节吗?clujure的评估和scheme/racket一样。我想执行第1行以获取第2行作为返回。我试着用eval在repl中运行它,但它在项目上遇到了问题。很抱歉出现了歧义。我想定义一个包含列表的XMLEval,以及XMLEval应该做什么。我看到了输入和输出,但是您能描述一下您将如何使用它吗?他从哪里获得xml eval?我想定义xml eval,它采用xml样式列表,列表项为(price(expression))。我希望表达式能够被计算。@alexadre:谢谢你的解决方案,它在clojure REPL中工作。我想进一步定义XMLEval。你能帮忙吗。
user=> `(item (itemname "some item") (price ~(* 19.95 1.08)))
(user/item (user/itemname "some item") (user/price 21.546))