言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

ロジックの勉強中2 ブール関数の取りうる値をテーブルに列挙する

http://languagegame.org/pub/booltable/booltable.html

booltable

今論理についてのテキストを読んでいるんだけど、ああいう数学的な記述って書き方が難しくてどうも自分がついてゆけているのかおぼつかなくなる。これはこういう意味だろうと思っていた事が実は全然違うと後で分かると、なんか素直に読む気が段々失せてしまった。そしてそのうちだんだんと、これ書いてる大学の先生は、実は難しく書くのが得意だけど全然プログラムの経験の無いハッタリ野郎なのではと疑心暗鬼になって、書いてある式を自分で全部確認してゆく事にした。

幸いな事にブール論理というのは真と偽しか無いから、どんなにややこしくても地道に表を作って行けば良いはずだ。と思って最初はノートに鉛筆でしこしこ true, false, true, false, ... と書いていたんだけど、そのうちなんだか馬鹿馬鹿しくなってパソコンにやらせる事にした。最初は二三時間で終わるだろうと高をくくっていたのだが、結局二日もかかってしまった。しかも時間を食ったのは論理の部分じゃなくてパーサ部分。こんな小さなプログラムにライブラリを使うのは嫌なので、自分でコンビネータパーサを組んだ。

こんな小さな文法ではコンビネータパーサめっちゃ便利。三つもヘルプ関数書けば (seq, orElse, many) それっぽくなる。この事についてはまた後で詳しく書きたい。

しょうもないプログラムだけど、結構楽しいです。p * (p=>q) => q というような事がよく分かるし、パーマリンクが付いているので後で思い出すのにも便利。