OCaml 標準ライブラリ探訪 #2 List に関するおわびとおことわり

関連リンク:
OCaml 標準ライブラリ探訪 第0回
その他の回は第0回のトラックバックよりご覧ください。

「さようなら」周り等で、ご批判を頂きました。ありがとうございます。元来の毒舌な者ですから、ご勘弁ください。教科書や論文を書いてるわけでも無し、このブログはお酒飲んで常に勢いで書いておりますから、深く推敲いたしません。こんなの出版しても売れないでしょ?

関数型言語では (ここで関数型言語と限定する必要は無いのかもしれませんが、他の言語のことは良く判りませんので語るべきでは無いでしょう)、 再帰ははっきり言って難しい概念で、これは逃げずに強調すべき点だと考えます。こんな感じに言い換えてみると私の強調度がわかるのでは無いでしょうか:

Cでポインタ理解したくない?お互い不幸になるだけですから、ポインタの無い言語を使ってください。ごきげんよう

私は自称「関数型言語できます」という方にはこの十年来いろいろと会って来ましたけれども、末尾再帰を知っていても、実際のプログラミングには使えないって人はホントに、ホントーに、多いんです。それは「関数型言語できます」、とは言いません*1。昔は私もそうでしたが、一度キツク言われて態度を改めた口です。 OCaml で末尾再帰余裕で使えるモンね、常にオーダー考えて関数書いてるよ、という方は余裕で OCaml 中級でしょう。よーく判ってる人でも複雑になると妙なメモリリークを起こすプログラムを書ける言語です。(その点、lazy な Haskell でオーダーをきっちり理解してプログラム書ける人は神なんじゃなかろうか。)
型理論とかはカッコイイから話題としては花がありますけど、プログラムを書くという点では、実は理解してようが理解してまいが、どうせ型安全にしか書けないから別に構わないんですよ。

あのパラグラフをもうちょっと優しく正しく言いなおすとですね、、

計算量の理論とか判りたくない方でも是非この dame_rev と List.rev に長めのリスト(長さ 100000 位で十分でしょう)を突っ込んで実行時間の違いを体感してみてください。OCaml では時に人間には直感的な再帰アルゴリズムを書いた場合、実際には全く使い物にならない事がありますよ。そういうことがあるって事を理解したくない方は、そもそも OCaml やっても苦労されるだけですから、配列で iteration する言語を使われた方がよいと思います。アディオス・アミーゴ。

そんなかんじです。これからも判りにくく不正確かつ扇動的なことを書いていきますが、よろしくお願いします。おやすみなさい。

P.S.

あ、それから、対象読者が不明だとのご指摘も受けました。うーん、難しいですね。全くの初心者向けじゃないのはご理解いただけると思います。そういや前には初心者から中級って書いてんだよね、、、

*1:関数型言語OCamlに読み換えた方がいいかもです