第5回「ふつうのHaskell読書会」@CSNAGOYA 開催しました。

5月 12th, 2008 admin Posted in CSNAGOYA, 今日のコード, 勉強会 |

5月11日に名古屋の芸術創造センターにて「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」の読書会を行いました。

関数型言語の勉強は楽しい!

正確に言うと、今までやったことの無いタイプの言語の勉強は楽しい。です。
オブジェクト脳(オブ脳)というのがあるように関数型言語脳というのがあるらしいとわかってきたのでとても楽しくなっています。
たとえば前回やった練習問題に「読み込んだファイルをnバイトごとに改行して出力せよ。」というのがあって、僕は手続き型言語脳なのでRubyでいうなら下記のように、nバイトあるかどうか調べ、その結果によって改行を加えるというHaskellのコードを書いたんです。

RUBY:
  1. str = STDIN.read
  2.  
  3. def splitAt(i,str,ans = "")
  4.   if str.length> i
  5.     tmp = str[0,i]
  6.     str[0,i] = ""
  7.     ans += splitAt(i,str,tmp)
  8.     ans
  9.   else
  10.     ans += str
  11.   end
  12. end
  13.  
  14. p splitAt(6,str)

しかし、参加者の1人の方が関数型言語を普段から使われている方で、その人が書いたコードは「読み込んだ文字列をnバイトずつ取り出して改行を加える。それが空リストになるまで繰り返す」というものでした。

RUBY:
  1. main = do cs <- getContents
  2.       putStr $ unlines $ map fold $ lines cs
  3.  
  4. fold line = case splitAt 6 line of
  5.         (x,[]) -> x
  6.         (x,xs) -> x ++ "\n" ++ fold xs

リストを操作して、それが空になるまでなにかを繰り返す。うーん!美しい!
これが関数型言語脳かぁぁ!と感動しました。

そしてさらにうれしいのは、僕はそんな方法はまったく思いつかなかったものの、教えてもらえばすごく当然で美しい方法だと簡単に理解できたことです。そんな関数型言語に片足をつっこんでいる今の状態はすごく愉快です。プログラマーの人ならこの感覚わかってもらえるんじゃないでしょうか。

やっぱりプログラミングは楽しい

さっきまでまったく分からなかったことが、今になってみると「なぜ分からなかったのか」すらわからなくなるぐらいの勢いで理解するというような、脳みそのミソが一瞬で上質でマイルドな感じに変わる超体験がプログラミングの学習のときにはよく起こる。僕はまだヘッポコプログラマとはいえ、ヘッポコゆえにそういう理解の壁を越える体験を何度もしてきたので「ああ、またこの感覚か~」と理解の神様の降臨の予兆を感じると楽しくてしょうがなかったりします。
いつかはわからないし、まだ何ヶ月もかかるかもしれないけど、あるとき突然脳みそに新しい考え方がすっかりインストールされる時がくるってのを確信する。そんな時僕はいつもアバッキオの同僚の言葉を思い出します。

「 『結果』だけを求めていると、人は近道をしたがるものだ…近道した時、真実を見失うかもしれない。やる気も次第に失せていく。大切なのは『真実に向かおうとする意志』だと思っている。向かおうとする“意志さえあれば”いつかはたどり着くだろう?向かっているわけだからな…違うかい?」

まぁちょっとポジティブすぎるし、「Haskellごときで幸せになれていいね~」という先輩方の声も聞こえてきそうですが、最近はそんな感じで楽しくてしかたない勉強会なので「PHPerにもできる!Haskell勉強会」是非ご参加ください。という勧誘で本エントリーを締めさせていただきます。

One Response to “第5回「ふつうのHaskell読書会」@CSNAGOYA 開催しました。”

  1. いいなぁ.
    楽しそうだなぁ.

    僕も悟りを開こうと思ってずっと前に「ふつける」は買ったんだけど,全然読めてない.
    LispとかHaskelとか,別の意味ではsmalltalkとか,悟りが開けそうな言語をちゃんとやっておきたいとは思うんだけど,なかなかね.
    最近はC++の変態的なプログラムに辟易しているから,何か新鮮な感覚が欲しいなぁ.

Leave a Reply