如何在clojure中做到这一点?

时间:2013-01-25 17:59:25

标签: clojure

我需要做以下事情:

(defn make-menu [] (for [i (range 3)] '(+ i 100)))

我需要make-menu返回:('(+ 0 100)'(+ 1 100)'(+ 2 100))

请注意,该向量包含未评估的函数。

是否可以在Clojure中执行此操作?

感谢您的帮助!

的Jakub

1 个答案:

答案 0 :(得分:5)

(defn make-menu [] (for [i (range 3)] (list '+ i 100)))

(defn make-menu [] (for [i (range 3)] `(+ ~i 100)))

第一个表单只是一个包含三个元素的列表:符号+引用,i计算为列表推导中的值和100。

第二种形式是语法引用的一个例子。 注意正常引用'和语法引用之间的区别:第二个允许通过前缀~来评估子表单。此外,它还完全符合符号,因此+变为clojure.core/+。正常引用只引用引用形式中的每个子元素,因此不可能进行评估。