我需要做以下事情:
(defn make-menu []
(for [i (range 3)]
'(+ i 100)))
我需要make-menu返回:('(+ 0 100)'(+ 1 100)'(+ 2 100))
请注意,该向量包含未评估的函数。
是否可以在Clojure中执行此操作?
感谢您的帮助!
的Jakub
答案 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/+
。正常引用只引用引用形式中的每个子元素,因此不可能进行评估。