次の行:(repeat 4 [2 3])
私にこれを与える:([2 3] [2 3] [2 3] [2 3])
これを取得するには、上記のベクトルのリストから 1 つのベクトルまたはリストを作成するにはどうすればよいですか?:[2 3 2 3 2 3 2 3]
ありがとう
次の行:(repeat 4 [2 3])
私にこれを与える:([2 3] [2 3] [2 3] [2 3])
これを取得するには、上記のベクトルのリストから 1 つのベクトルまたはリストを作成するにはどうすればよいですか?:[2 3 2 3 2 3 2 3]
ありがとう
concat
実際、まさにあなたが望む機能です
user> (apply concat (repeat 4 [2 3]))
(2 3 2 3 2 3 2 3)
これは遅延入力でも機能します。
user> (take 8 (apply concat (repeat [2 3])))
(2 3 2 3 2 3 2 3)
これは別の方法です:
user> (def flatten-1 (partial mapcat identity))
#'user/flatten-1
user> (flatten-1 (repeat 4 [2 3]))
(2 3 2 3 2 3 2 3)
怠惰と互換性があり、 flatten とは異なり、下位構造を保持します(1レベルの平坦化のみを行います)
user> (take 12 (flatten-1 (repeat [2 3 [4]])))
(2 3 [4] 2 3 [4] 2 3 [4] 2 3 [4])
(take 8 (cycle [2 3]))
;; => (2 3 2 3 2 3 2 3)
衒学的に言えば、ベクトルを要求したので、次のようになります。
(->> [2 3] cycle (take 8) vec)
「次のシーケンスを連結する」よりも「このシーケンスの要素を循環する」ことを示すため、(concat自体を使用しますが)concatよりもcycleの方が少し適切だと思います。意見の問題です。