Racketのeq? とequal?の違いについて
バグ探しで1時間ぐらい無駄にしたのでもう懲り懲りなのでここに書いておく。
そもそもこのまえコードをTAの方に見せたときに、「そういえば私もよく覚えてないんだけどeq?とequal?の違い分かってる??」って聞かれて、その時は適当に「えーっと、、評価結果のみを比べるのがequal?でeq?はシンボルとか文字列とか型が違っても一緒ってみなされるとかでしたっけ??」とか適当に答えてた。まあTAの方も「多分違うと思うけど私もわかんない〜」とかおっしゃってたので適当に流してましたがまさかこんなことで後々1時間近くデバッグに費やすとは、、、
ということで1回生の時に受けてた講義のサイトから
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/predicate.html
- eq?は,比較する2つの引数がシステム内部で同一のデータ(セル)を指し示している場合に#tを返す.
- equal?は,評価した結果が等しいような2つの引数が与えられたとき#tを返す.
おとなしくequal?使おう。