Doseqは、yごとに1 xを評価します。 Clojureで1 yに対して1 xなどを評価する方法はありますか?

StackOverflow https://stackoverflow.com/questions/1216668

  •  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]))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top