このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

愚痴+応答

僕が理屈っぽいのは確かで、その理屈が分かりにくい事態はあるでしょう。しかし、理屈は分からないままに、計算してみる、解いてみる、試してみる、作ってみる、確かめてみることはできるし、そういう行為を通じて、あるいは行為の後で「分かる」ってこともあるのだよね。

理屈が即座に机上で理解できないからといって、軽視(むしろ軽蔑?)したり無視するのは哀しい気がする(健全に疑うのはいい)。さらに哀しいことは、こういう傾向が(非常におおざっぱな非統計的印象を言えば)だいたい年齢と相関しちゃうこと。若い人は、「わからないでもやる」エネルギーも持ち合わせている、ってことかな。もちろん、この相関が僕自身にも適用できるから哀しいのだけどね。



若い(実年齢は知らんけど、中年じゃないでしょ)bonotakeさんやKuwataさんが反応してくれているのだけど:

http://return0.dyndns.org/d/2007/01/30より:

うそぉ、何で動いてるの!? <- 未だに全然自信が無いらしい

あってる自信が全然ないものの、とりあえず解き終わった。なんだか圏論モナドが少しはわかった気がするようなしないような。

動かしてみて、“わかった気がするようなしないような”状態になれば、それでオッケ〜イ。

でもこれ、強い静的型の言語でやった方が有難味がある気がしなくもないなあ。

型がイイカゲンな言語のほうが楽ちんに実装できますけど、本来のモナド概念は強い(ものすごく強い)型を背景とした定式化になっています。

型Aの値を引数として、型Bの値を返す関数の型を A→B と書くことにして、f:A→M(B)を M(A)→M(B)に拡張する高階関数extは、(A→M(B))→(M(A)→M(B)) という型を持ちます。extは型A, Bをパラメータに持つので、実はextA,Bと書くべきです。同様に、unitも型Aごとに unitA:A→M(A)。

型パラメータをジェネリックスの習慣に従って山形括弧に入れて書けば、

  • ext<A, B> : (A -> M<B>) -> (M<A> -> M<B>)
  • unit<A> : A -> M<A>

なんとなく、テンプレートの展開とスキーマによる検証とそこからのプログラム生成に近いものを感じたってだけなんだけど。まあ、そういうことはまたいつか考えよう。

その“感じ”は的を射てます。またいつか考えてください。