312 :
デフォルトの名無しさん:
>>181の訳
Monadicプログラミング・パターン
「Monadicプログラミング」とは、(関数言語の文脈で)Monadが理論化されるずぅっと前から(訳注1:未確認…)、関数言語プログラマが使っていた半ば常識的な「デザインパターン」の、
新しい高級な名前に過ぎません。
(状況を説明するために)
とりあえず複数のコマンド列を実行する関数が欲しいと仮定します。
しかし困った事に(副作用のない純関数言語の)関数では、単に(何らかの式を)評価(evaluate)して純粋な値(pure value)を返す事しかできません。
あなたがすべきなのは、評価結果として実行したい複数のコマンド列に相当する「単一の値(a value)」を返すような関数を得る事です。
そんなわけで(純関数言語におけるMonadicプログラミングの)デザインパターンは、
各関数は通常の引数/戻り値の他に状態値(state value)を受け渡す、
という内容になります。
ただしこのパターンにはいくつかの制約が課せられており、例えばその一つはこうです:各状態値は、ただ一度だけしか使ってはならない
コマンド列を順次実行するには、各コマンドを関数化して、引数として現在のWorld's stateを受け取り、戻り値としてコマンド実行後のWorld's stateを返すようにする必要があります。
例えば2つのコマンドの順次実行は、最初の関数から次の関数への状態受け渡しとなります。
Monadについて考える場合には、他にもいろいろ追加すべき要素があります。。。
そしてこの「デザインパターン」は、圏論(Category Theory)として知られる数学の一分野に由来する数学概念であり、この概念は圏論で「Monad」と呼ばれている事が判明します。
原文脚注:圏論とは、言わば数学的なデザインパターンの研究です。
実際はそれ以上のものなんだけど、とりあえずコンピュータ・サイエンティストが圏論を研究する時に、このような考え方が良い直観を与えます。
(訳注2: 本文後半、数学概念の説明に関して、後続レスで議論あり)
再利用技術を否定するアンチ君はきっと、
受注したシステムの著作権ごと売り渡してしまい
毎回1から作り直してる零細ソフトハウスにお勤めなんだろう。
315 :
デフォルトの名無しさん:2005/06/21(火) 12:42:20
結論1: オブジェクト指向拡張のなされた関数言語 (OCaml)とデザインパターンは両立しうる (
>>314)
結論2: 関数言語の世界でも、熟練したプログラマーが使うノウハウは
イディオム、デザインパターン、プログラミングスタイルなどと呼ばれる形で蓄積されている。
例えば純関数型言語Haskellを特徴づける Monadicプログラミングも、その一例である。
結論3: デザイン・パターンを「設計上よくあらわれるパターン」という一般概念として考える場合、
それは全てのプログラム開発で発生する事象である。
デザイン・パターンなど必要ないという人物は、単にプログラミングをした事がないだけである。
316 :
307:2005/06/21(火) 12:46:28
>>310 成果の大きさに発狂だといいんだけどね...
あと、一応フォロー入れておくと、プロジェクトに一人だけCプログラマーとしては
優秀な人がひとりだけいた。彼にはほんと助けられた。
でもせっかく役割分担しても、役割の難しい部分は巡りめぐって彼の元に到達して
いて、
はたで見ていてかわいそうだった。
プロジェクトが終わり、彼が充実感を得たのは理解できたんだけど、
その他の烏合の衆までが充実感を(錯覚して)感じているのに正直ムカついた。
アンチはサーバサイドアプリケーションを作ったこと無いに一票。
318 :
デフォルトの名無しさん:2005/06/21(火) 12:54:21
>>312補足
Monadicプログラミングの片鱗らしきものは、
例えばFortranで大域変数の使用を避けて関数プログラミングに徹する事で、得る事ができる。
そう、Fortranの作者Backusは、関数プログラミング言語FPの作者でもあるんだ。
また、中島秀之先生(現在はこだて未来大学長)のProlog/KR本に載っている「多重世界機構」
(アイデアの源泉はたぶんミンスキーの「フレーム理論」)も、
Monadicプログラミング・パターンの実例なんだ。
あのさ、俺今気づいたんだけどさ、っていうか今更気づく俺が馬鹿なんだけどさ、
みんな分かってると思うんだけどさ、
このスレってデザインパターンが必要か否かの議論じゃなくて、
必要だと感じる人達が集まって、よりよいデザインパターンの使い方とか
新しいパターンとかについて議論する場所じゃないの??
別スレとして
「デザインパターンは本当に必要か?」
「プログラミングスタイルを語るスレ」
みたいなの立てたほうがいいんでない?
今の現状じゃぁデザインパターンの議論にすらたどり着いてないじゃん。
こんな低クオリティ見てらんない。
C言語のスレで「本当にC言語は必要か」なんて議論、普通しないだろ?