这是一个非常基本的问题,我敢打赌,但是对我来说,这是一个头疼的问题。我试图完成这个“介绍clojure”类问题(http://www.4clojure.com/problem/40),我需要设计我自己的干涉函数版本(并输出为矢量)。我用下面的函数做这个有点成功(顺序是正确的):使用Clojure函数铸造嵌套类型
(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)]
基本上,我回来这个序列在括号(这是一个列表?),然后我尝试将其转换为载体并没有真正转化它,它似乎只是包装它。我也尝试过拼合功能无济于事。
任何人都可以解释如何解决,或者更重要的是,这种现象的性质(我称之为“嵌套类型”)是什么以及处理它的最佳实践方法是什么?
另外,我的结果是括号内的矢量列表吗?或者这个序列真的不是一个清单?
在@Chuck的帮助下解决!最后的回答是,对于那些好奇的人(我重新排序并添加了其余的位,因为它并不意味着插入的字符尾随或领先)。 (fn my-interpose [n x](vec(rest(interleave(take(count x)(repeat n))x)))) – jm0
顺便说一句,'take'是不必要的。你可以写'(vec(rest(interleave(repeat n)x)))'并获得相同的效果。或者,使用线程操作符,'( - >(repeat n)(interleave x)rest vec)'。 – Chuck