ushidayの日記

主に「IBMi」のメモに・・・

Haskell読書会5th@ShizuDevをやりました

毎月恒例の第5回Haskell読書会を静岡で開催致しました。
今回はプログラミングHaskellの第6章”再帰関数”です。早いもので、読書会も折り返し地点になりました。
スピーカーは、私が産声をあげた地”豊橋”から、いつも来て頂いている”ふるたさん”に、やって頂きました。名古屋からもわざわざ”クラ●△◇×◎※さん”が、初参加で来て頂きました。東京や名古屋の都市圏から、静岡の勉強会に来て頂けるなんて感無量です。ふるたさん&関係者&参加者のみなさん、ありがとうございました。

内容は参加メンバーの方々が、既にブログでまとめて下さっているので、そちらをご参考に...。

再帰自体は、自身を呼び出したり、相互呼び出ししたりと、難しいお話ではないのですが、今回の章は”何が何でも再帰的”な部分がありました。しかし実際は再帰を知る事により、この後「あそこでは再帰でやったけど、こうやればもっと効率よく解りやすいよ」的な展開になって行くのかな?と個人的には思っております。

再帰関数は、最終的に基底部に、落ち着かないと、永久ループになってしまうので、いかにその基底部のパターンマッチが、パッとスッキリ思いつくかが勝負だと思いました。逆にパターンマッチが直ぐに思いつかないケースは、変テコな実装を考えてしまう事も?...。
再帰の利用ケースは、例題や解説でもそうですが、やはりリスト等の繰り返し処理が多いと思います。Haskellをこれまで勉強してきて、”リスト処理が簡潔にこなせる”(特に部分的に関数を作って、最終的に出来た関数は)という印象がさらに強まった感じです。

不思議な感覚なのは”( n + k )パターン”を使った再帰です。以前の章で「n+kパターンは、将来的に無くなるかも...。あまり積極的に使わない方が...。」みたいなこと書いてあったのですが、今章はバンバン出てきます。例えば2つ整数を引数に取って、積を返す関数”mult”は...。

■(n+k)パターンの例

mult::Integer->Integer->Integer
mult 0 _ = 0
mult _ 0 = 0
mult x 1 = x
mult 1 y = y
mult x (y+1) = x + mult x y

と書けるのですが、xの加算をy回繰り返すのに、(y+1)で受けるという文化が、まだ少し馴染めません。
ついこう書きたくなってしまいます。

mult x y = x + mult x (y-1)

でもむしろ(n + k)パターンの方が、いかにも”Haskell”らしくて好きです。「ザクとは違うんだよ。ザクとは。」みたいな。(でも、非推奨の記法かもしれませんがね...。)

懇親会では富士の「B級グルメ”つけナポリタン”食べるぞ!勉強会」の話で盛り上がっていたので、富士での開催もありそうです。次回は2回目の三島です。その次は、静岡でガンダム公開初日に、ガンダムのある東静岡でやる予定です。その次は浜松。静岡県を東へ西へShizuDevは活動していきます。

今回は、業務連絡が行き届いていなくて、おやつが普段の2倍になってしまいました。その分糖分補給もいつもの2倍。みなさんの頭も2倍スッキリしたカモ?
■今回のおやつ(ドーナツ&磯自慢入チーズケーキ)