Locked History Actions

Diff for "scala/monad"

Differences between revisions 2 and 3
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
== モナドとは何か == == 第一印象 ==
Line 7: Line 7:
モナドとは「単なるデザインパターンである」と思えばいい(らしい、以下略)。どのようなデザインパターンであるかといえば、これは「副作用の無い仕組みを用いて副作用を扱う」という、いっけん矛盾したものである。 モナドとは、連続して計算を行うパイプラインを簡単に作成するためのものである。古今東西同様の仕組みはいろいろ考えられてきたが、その一種と言える。例えば、
Line 9: Line 9:
なぜ「副作用が無い方がいいのか」については、Scala言語の本にはいくらでも記述があるので省略。これに対し、副作用がなければ何もできない。  * unixのパイプ<<BR>>入力を受け取ってフィルタリングを行い出力をするコマンドをつなぎ合わせる。

{{{
ls -l | grep something | sort -k 6,6
}}}

 * Javaのストリーム<<BR>>これも同じ。前のオブジェクトの入力を受け取り、フィルタリングを行う出力するオブジェクトを数珠つなぎにする。

{{{
 BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("something")));
}}}


形態は異なるけれどもやりたいことはこれと同じ。「任意の計算をつなぎあわせて所望の目的が達成できればとても便利だろう」という悲願の実現であると言える。

モナド

※以下は間違いの可能性があるので信用しないように。これは単なる学習メモです。

第一印象

モナドとは、連続して計算を行うパイプラインを簡単に作成するためのものである。古今東西同様の仕組みはいろいろ考えられてきたが、その一種と言える。例えば、

  • unixのパイプ
    入力を受け取ってフィルタリングを行い出力をするコマンドをつなぎ合わせる。

ls -l | grep something |  sort -k 6,6
  • Javaのストリーム
    これも同じ。前のオブジェクトの入力を受け取り、フィルタリングを行う出力するオブジェクトを数珠つなぎにする。

 BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("something")));

形態は異なるけれどもやりたいことはこれと同じ。「任意の計算をつなぎあわせて所望の目的が達成できればとても便利だろう」という悲願の実現であると言える。