1. ホーム
  2. clojure

[解決済み] Clojureのdoseqとforの違いについて

2022-05-18 13:22:37

質問

Clojureのdoseqとforの違いは何ですか? また、どちらか一方を選択する場合の例としてはどのようなものがありますか?

どのように解決するのですか?

違いは for は遅延シーケンスを構築し、それを返すのに対し doseq は副作用の実行用で、nilを返します。

user=> (for [x [1 2 3]] (+ x 5))
(6 7 8)
user=> (doseq [x [1 2 3]] (+ x 5))
nil
user=> (doseq [x [1 2 3]] (println x))
1
2
3
nil

他の配列を元に新しい配列を作りたい場合は、forを使用します。ある配列の要素に基づいて副作用(印刷、データベースへの書き込み、核弾頭の発射など)を行いたい場合は、doseqを使用します。