Doseqは、yごとに1 xを評価します。 Clojureで1 yに対して1 xなどを評価する方法はありますか?
-
06-07-2019 - |
質問
このスレッドの名前をどのように表現すればよいかわからなかったので、明確にできる場合はそうしてください。
私のサンプルコードは次のとおりです。
(doseq [x [1 2 3] y [3 2 1]] (println (str x y)))
そのコードの出力は次のとおりです。
13
12
11
23
22
21
33
32
31
nil
リストの内包表記とdoseqは両方ともこのように評価されることを理解しています。これを行う別の方法はありますか?xの1要素がyのすべての要素に使用されるなどの代わりに、xの1要素がyの1要素と一緒に使用されるなど、出力は代わりに:
13
22
31
この言い回しではないのでごめんなさい、言葉で正しく言い表せないようです。
編集:Haskellでは、リストの内包表記と言語拡張機能を使用してこれを行うことができると思います。 ParallelListCompsまたは何か。
解決
簡単にできます
(doseq [[x y] (map vector [1 2 3] [3 2 1])]
(println (str x y)))
他のヒント
(partition 2
(interleave [1 2 3] [3 2 1]))
interleave
は、指定されたシーケンスから交互要素のシーケンスを生成し、 partition
はこのシーケンスを n
要素のシーケンスにグループ化します。
これはより簡潔です:
(doall (map println [1 2 3] [3 2 1]))
所属していません StackOverflow