Monday 9 March 2009

関数型言語

なんか、twitter で一部、盛り上がっているようなので。

前にも書いたけど、最初に見たのはmu-LISPです。中西先生の「LISP入門」だったかなぁ。で、cond/prog を見てがっかりした記憶があります。prog は、今でも、なんで必要なのか理解出来てません。cond (if 文)があって、再帰できるなら、なんでも書ける。普通だなと思いました。

大学院での最初に顔だしたのが、UTI-LISP compiler の読み会だったので、マクロの使い方とかが、すごく面白かった。ここはnilは来ないからチェックしないとか、そんな細かい読み会でした。

米澤先生の岩波の本(算法表現論)で、λ計算とかコンビネータとかを勉強して、面白かった。

いろいろ勉強すると面白くって、大学院のコロキウムで「LISPでない関数型言語」という話をしました。遅延評価とかが面白くって。HOPEとかのあたりですね。

そんなわけなので、副作用のある言語は関数型と認めないというところがちょっとあります。MLとかOcaml は、僕的には関数型言語ではないんだよな。普通の手続き型言語でしょう。

でも、型理論はねぇ〜 CCCとかも、一応、手を付けたし、カーリー・ハワード対応はカッコ良いと思いましたが... 実用的とは思えないです。もちろん、難しいってのもあるけどさ。

理論とは別に、Polymorphism の便利さは一発でわかりました。だって、Smalltalk を先に勉強してましたから。必然だし必須だと思う。マルチメソッドも、ある意味で必須でしょう。

で、次に関数型言語で、がっかりしたのは、モナドですね。そういうことしないで遅延評価で頑張るって話ではなかったのか? モナドの良さは型理論と状態遷移の整合だけだと思う。これじゃぁ、あまりに手続き型言語寄りです。

 なので、僕の印象は「Smalltalkを関数型言語が追いかけている」です。

アセンブラ/Smalltalk/Prolog と型のない言語から入ったので、型理論に関して、思い入れがない、いや、肩入れできないというところか?

もっと、はっきり「プログラミング言語には型/型理論は不要」と言ってもいいかな。それは、言いすぎか。静的な型理論の利点は少ないぐらいかも。

PerlとかJavaScript は、動的な型を持つ言語で、その便利さったら麻薬的です。とりあえず、Perl で書いておいて、それから、Cやアセンブラに書きなおすとか。

No comments: