mapすごいよ map

ブログの移行がうまくいってなかったのかな?
途中できれちゃってたので再掲。


Gaucheのスナップショットからのビルドについて。

自分、情けないのですがSchemeそのものをまだまだ全然理解できておらず、
まず雑音無しでSchemeの勉強すべきと考えなおしました。
で、Version 0.9 のアーカイブを落としてきて環境を整え直しました。
Schemeの範疇で一通りのことができるようになったら、開発へ貢献しようと思います。
がんばるぞ。


さて、本題。

以前作成した年賀はがき用の宛名印刷プログラムですが、これ最初はRubyで作成していました。
で、ちょうど良い大きさのプログラムなので、これをお勉強の為にGaucheで再実装してみました。

最初にできたプログラムはものすご〜く手続きチックなモノだったのですが(今も割とそうだけど)、
それでもありとあらゆるものを再帰で書きまくってると、
かなりの頻度で同じようなイディオムになってくれるので、
再帰に違和感はなくなりました。もうループ別にイラネ。


Gauche作者のShiroさんが、冗談でこんな記事を書かれてらっしゃいますが、
このレベル4の「前半のみ」をクリアした感じです。

が、実はその段階ではレベル3をクリアしてませんでした。
なんと作りたての時は「map」を一切使用してなかったのです。
(map使えば1行、2行で終わるような処理まで再帰で自前実装してた。)
宛名印刷プログラムをschemeで再実装する前に、
一応mapとかfindとかfoldの練習問題は解いていたんですよ?
でも練習問題解くだけじゃダメで、やっぱり実践こなさないとすんなり使えるようにはならんのですねぇ。

リファクタリングをしているうちにmapのことを思い出し、
今度はなんでもmap化してみました。すごいね、map。
再帰を実践していた時よりも、mapを実践した時の方が自分の脳内で何かが変わった気がする。


今までのscheme絡みの感動は、


・構文のシンプルさによる可能性を知って、
 脳内のプログラミングの世界が一気に広がったこと。
 (その時は具体例は思いつかなかったんだけど、それでもリアルに鳥肌がたった。)

・「手続きを渡す処理」の便利さをmapで実感できたこと。

の2つ。

さて、次の感動はSchemeプログラマのレベル」によるとどうやら「継続」のようですが、
既に結構いろんな情報をあさりまくってるのにイマイチ理解できない。。

mapの時もそうだったけど、俺はあんまり理解力がないタイプなので、
最初泥臭くコーディングして、それを継続で置き換える、というプロセスを経ないと理解できないかも。。
う〜む。