すごいH本読書会 in 大阪#16で15章Zipperについて発表してきました. スライドはこちら.
記念すべき最終回は,最終回にふさわしくもくもくと練習問題を解く会となりました. 練習問題はスライドの最後にもありますが,こちら.
Zipperを使ってBrainfuckインタプリタを実装する
メモリをいったりきたりするBrainfuck
の挙動はZipper
を試すにはもってこいでした.
けっこうヘビーそうな問題ですが,Brainfuck
の挙動をつかむとわりと簡単に実装できます.
ぼくの解答はこちら.
簡単に解説しておくと,Code
とPointer
の2つのZipper
を使って実装しています.
Code
は読んだ通りプログラムで,]
命令で戻るためにZipper
にしてます.
Pointer
はメモリで,なんで3要素あるかというと,.
命令の書き出しでIO
アクションうまいことやるのがめんどくさかったので,書き出し要のbufferくっつけて最後にbufferの内容をまとめて出力してます.
手抜きです.
あと,
命令は実装してないし[
, ]
命令もどうにかHello, world
は動く,というレベルでしか実装してません.
けれども1時間程度で実装したことを思えば,まあまあなものができたかな...
キチンと動くもの作ろうと思うとあともうちょっとサンプルプログラムが欲しいですね.
感想
すごいH本読書会 in 大阪は,2012/11の開始から足かけ2年,ついに最後までやりきることができました. 最初は多かったメンバも徐々に減り,一時はどうなるかと思いましたが,なんとか無事完走することができて本当によかったです.
すごいH本はかなりとっつきやすく書かれていますが,ひとりだと飛ばしたであろうところや,実際に書かないと理解できなかったところも多くありますので,読書会という形で勉強したのはよかったと思います. 2周目ということで,また最初から開催されていますので,「Haskellはじめたい!」という方は是非参加するといいのではないでしょうか.