如何将包含不同类型元素的多个序列组合成clojure中的一个序列

时间:2016-02-09 22:57:46

标签: clojure

我想知道如何将两个或更多不同类型的元素组合成一个列表。像:

(defn combine [vector]
   (conj '(remove number? vector) 10))

这是一个测试:

(combine [1 2 d g f e ])

这是错误:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: d in this context,

我想知道可以使用“conj,concat,into”这些函数来组合它们。另外,我在列表前添加了引号(d g f e),但是错误说d无法解决。有人帮我弄清楚这个问题吗?非常感谢你!

2 个答案:

答案 0 :(得分:3)

引用函数的输入以防止它解析列表中的符号:

(combine '[1 2 d g f e ])

'quote函数的shortcur(读者宏)。否则它会在向量传递给combine函数之前尝试在向量中转换(在Clojure中称为“评估”)符号。使用',它将尝试在当前命名空间名称d中查找var并获取它的值,以便将其放入向量中。

答案 1 :(得分:1)

报价错误。尝试

(defn combine [vector]
   (conj (remove number? vector) 10))

(combine '(1 2 d g f e)) 
;(10 d g f e)