按索引组合矢量

sun*_*ots 3 clojure clojure-contrib

我正在寻找一个输入两个长度为n的向量的函数,

即[:a:b:c:d:e:f] [1 2 3 4 5 6].输出一个长度为2n的向量

[:a 1:b 2:c 3:d 4:e 5:f 6].

但是,如果输入的第二个向量与n的长度不匹配,它将循环,

即[:a:b:c:d:e:f] [1 2 3]

输出:[:a 1:b 2:c 3:d 1:e 2:f 3].

 (defn Swanson [x y] (vec (flatten (interleave x (repeat (count x) y)))))
Run Code Online (Sandbox Code Playgroud)

此外,该函数也可以取[xy min max n],其中x和y是向量,min是开始交织的索引,max是结束交织的索引,n是交织的步长.

Ale*_*lex 6

你想要cycle:

user> (take 6 (cycle [1 2 3]))
(1 2 3 1 2 3)

user> (interleave [:a :b :c :d :e :f] (cycle [1 2 3]))
(:a 1 :b 2 :c 3 :d 1 :e 2 :f 3)
Run Code Online (Sandbox Code Playgroud)