Home > Archives > June 2015

June 2015

Prolog 怖い

リストの長さを意味する述語 p を作ろうかと思った人が次のコードを書いた.空リストの長さはゼロという意味で.

p([],O).

そして p([],N). とやって,N = 0 と返ってくることを期待してみると……

?- p([],N).
true.

期待と違う答えが返ってくる.何故だ……

ということで,このコードのデバッグに結構時間を食った.実際には元のプログラムはもう少し大きかったのだけど,本質的には上のコードのバグ探し.

んで,デバッグ後のコードは次のとおり.

p([],0).

つまり,大文字の O(オー)と 0(ゼロ)を間違えて書かれていたことに気が付かなかったというオチ.本人が最終的に気づいたので解決したけれど,本人がその場に居なかったら誰も気づかずにさらなる時間を無駄にしたに違いない.

まあ,紛らわしいフォントを使うのが悪い.プログラミングに使うって分かってんだから .emacs のひな形にプログラミングしやすいフォントを指定するよう書いておけばいいのに(学生が演習で使う端末室の計算機なのだから).

閑話休題.

O と 0 を書き間違えても正しいコードになるってのは高級言語ならではの面倒さかね.C言語やJavaではコンパイルエラー一発でしょう.

Home > Archives > June 2015

Search
Feeds

Page Top