web-dev-qa-db-ja.com

なぜScala flatmapの魅力?)(これはClojureの世界のmapcatと同じではないようです)

Scalaコミュニティ- FlatMap関数の明らかな魅力 があります。

モナドのバインド部分に使用されるため、FlatMapが重要であることを理解しました。 (そして、Clojureコミュニティはまだモナドに飛び込んでいません somewonderfulexceptions )。

現在、Clojureコミュニティでは、「MapCat that S ***」など、対応する文化的イディオムはありません。

2つのコミュニティの違いとこの違いの理由に関する私の理論は、Clojureの同時実行プリミティブが、単一のマシンで、単一のインスタンスで問題を解決するのに役立つということです。 (つまり、Clojureは並行性に優れています)。一方、Scala世界では、アクターモデルの台頭により、Scalaは、マルチマシン問題の解決に少し焦点を合わせています。マシンの問題は、問題を部品に分解することに重点を置いており、分解できるものとスケールに重点を置いています(例:モノイド)(ScalaにSTMがあり、そのActorモデル、AvoutとCascalogに気づきました)。これに対する素晴らしい例外です-私は一般化しています)

私の質問は、なぜ flatmapによるScalaの魅力 なのか、です。

(私は、フレームウォーを始めるつもりはありません-両方のコミュニティはお互いの存在から利益を得ていると思います-私は文化的な行動を理解しようとしています)。

3
hawkeye

モナドのバインド部分に使用されているFlatMapが重要であることを理解しました。 (そして、Clojureコミュニティは、いくつかの素晴らしい例外を除いて、まだモナドに飛び込んでいません)。

それはほとんど説明全体だと思います。多くのScalaイディオムとアプローチはHaskellから派生しているため、タイプセーフ、モナドなどに多くの注意を払っています。

現在、Clojureコミュニティでは、「MapCat that S ***」など、対応する文化的イディオムはありません。

mapcatは、flatMapとは異なり、コレクションでのみ機能します。

マルチマシンの問題に対するこの焦点は、問題を部品に分解することに重点が置かれており、分解できるものとスケールにさらに焦点を当てています。 (例:モノイド)(ScalaにはSTMがあり、Actorモデル、Avout、Cascalogはこれに対する素晴らしい例外です-私は一般化しています)

Clojureコアにおけるこれのより良い例は、Reducersです。

7
Alexey Romanov