1

我有一个功能

(defn hi [a] '[a 2])

它应该取一个值 a 并将该值插入带引号的向量中,然后返回向量。

所以调用(hi :abc)应该返回[:abc 2]
需要注意的重要一点是引用了内部向量。
我该怎么做呢?

4

2 回答 2

1

这可以帮助:

user=> (defn hi [a] [a '2])
#'user/hi
user=> (hi :abc)
[:abc 2]
于 2013-01-04T10:29:08.497 回答
0

如果我理解正确,您希望能够将未定义的符号传递给函数,并取回包含该符号的向量(添加了一些其他内容)。

如果您在将符号传递给函数之前引用它,那么您不必在函数内部执行任何特殊操作:

user=> (defn hi [a] [a 2])
user=> (= (hi '?ab) '[?ab 2])
true

如果您不想引用符号(例如,您正在制作 DSL 以启用惯用的 datomic 查询结构创作),那么您必须使用宏,因为评估函数将导致符号在命名空间。您可以尝试以下方法:

user=> (defmacro hi2 [a] `(quote [~a 2]))
user=> (= (hi2 ?ab) '[?ab 2])
true
于 2013-01-04T16:17:40.507 回答