5

次の行:(repeat 4 [2 3])

私にこれを与える:([2 3] [2 3] [2 3] [2 3])

これを取得するには、上記のベクトルのリストから 1 つのベクトルまたはリストを作成するにはどうすればよいですか?:[2 3 2 3 2 3 2 3]

ありがとう

4

4 に答える 4

19

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])
于 2013-10-25T16:43:26.720 に答える
6
(take 8 (cycle [2 3]))
;; => (2 3 2 3 2 3 2 3)
于 2013-10-25T17:21:24.850 に答える
2

衒学的に言えば、ベクトルを要求したので、次のようになります。

(->> [2 3] cycle (take 8) vec)

「次のシーケンスを連結する」よりも「このシーケンスの要素を循環する」ことを示すため、(concat自体を使用しますが)concatよりもcycleの方が少し適切だと思います。意見の問題です。

于 2013-10-26T20:19:40.207 に答える