这是我打赌的一个非常基本的问题,但对我来说有点令人头疼。我正在尝试完成这个“clojure介绍”类问题(http://www.4clojure.com/problem/40),我需要设计我自己的插入函数版本(并作为向量输出)。我使用以下函数成功地完成了这个(序列是正确的):
(defn my-interpose[n x] (vector (interleave x (take (count x) (repeat n)))))
然而,当我运行它时,我得到一个奇怪的输出 - 它看起来像一个向量中的列表?这是我在REPL中看起来的样子......
=> (my-interpose 0 [1 2 3])
[(1 0 2 0 3 0)]
基本上,我在括号中找回这个序列(这是一个列表吗?)然后我尝试将它转换为向量并没有真正转换它,它似乎只是包装它。我也试过扁平功能无济于事。
任何人都可以解释如何修复,或者更重要的是,这种现象的本质(我称之为“嵌套类型”)是什么以及处理它的最佳实践方法是什么?
另外,我在括号中的结果是向量中的列表吗?或者该序列真的不是一个列表?
答案 0 :(得分:4)
这是vector
的作用 - 它接受它的参数并将它们放在一个向量中。我认为你想要的函数是vec
,它采用一个集合并将其转换为一个向量。
顺便提一下,矢量中的集合本身不是列表,而是LazySeq。