1
複数のベクターがある場合、1つのエレメントで重複する新しいベクターを作成するにはどうすればよいですか?例えば クロージャーで重複するベクターを作成する
、与えられたこれらのベクター:結果のはベクトルを重複[1 1 1] [2 2 2] [3 3 3]
は次のようになります
[1 1 1 2]
[1 2 2 2 3]
[2 3 3 3]
複数のベクターがある場合、1つのエレメントで重複する新しいベクターを作成するにはどうすればよいですか?例えば クロージャーで重複するベクターを作成する
、与えられたこれらのベクター:結果のはベクトルを重複[1 1 1] [2 2 2] [3 3 3]
は次のようになります
[1 1 1 2]
[1 2 2 2 3]
[2 3 3 3]
私の戦略は次のようになります
コードは開始条件と終了条件を処理する必要があるために少し複雑ですが
(def vectors [[1 1 1] [2 2 2] [3 3 3]])
(map
#(concat
(if (last %1) [(last %1)] [])
%2
(if (first %3) [(first %3)] []))
(cons nil (butlast vectors))
vectors
(concat (rest vectors) [nil]))
=> ((1 1 1 2) (1 2 2 2 3) (2 3 3 3))
再帰的な実装::のようなもので
(defn overlap [colls]
(loop [ret [] prefix [] x (first colls) colls (next colls)]
(if colls
(recur (conj ret (concat prefix x [(ffirst colls)])) [(last x)] (first colls) (next colls))
(conj ret (concat prefix x)))))
作品、ありがとう! – jhickner