Haskell Quizに関して追記
Hacker's Cafe Blog: Haskell Quiz
($)を再定義していないって書いていなかったのは、素でうっかりと…。なんというか「一意に決まる」って言わない方がよかったかなぁ。こういうケアレスミスで余詰めが発生してしまうとか僕にはありがちすぎる。
前半がまるごとダミーだなんてことはなくて、あとそんな演算子が再定義できる言語ならなんでもできるようなことだったらクイズになんかしなくて、一応僕としてはHaskellのHaskellらしい機能を使っているつもりだったりするわけだ。
あと、この問題を聞いて id:n_shuyo さんに「PHPとかだと簡単に作れそうですね」とコメントされたのが一般論としては結構すばらしい洞察かと思う。PHPやPerlやJavaScriptで「数学的に考えると変な挙動」を簡単に起こせるのはなぜか。
// JS a = "9" b = 10 c = "100" console.log(a < b) // true console.log(b < c) // true console.log(c < a) // true
それは、プログラミング言語が数学的な振る舞い以外に色々な余計なことをするから。そのほうが便利だろうと思って、良かれと思っておせっかいを焼くから。この場合「文字列と数値を比較したときに勝手に数値に変換する」ってのね。まあ、実際にそれが便利であるケースの方が多いんだろうけども、便利な道具を深く理解しないで使っていると複雑なケースで手を咬まれるよね。そういう複雑なケースを作ってクイズにしているつもりだったりする。つまりそういうHaskellのPHPっぽい部分はどこなのかって考えるとヒントになるのかなーとか。