真面目に考えると

クロージャさえあれば、if 文は本当に排除できますし、そういう言語は多分もうありますよね。


ただ、そんな感じでif文を仮想関数で代用して、組み込みのbool型をやめて、BoolインターフェイスとTrueクラスとFalseクラスを導入するのがベストなのかと言われると微妙な気分。

インターフェイスみたいな方法で実現すると、拡張性が発生するんですよね。当然ですけど。Boolインターフェイスを実装した True でも False でもないクラスが作れるわけで。もちろんそれはある面いいことなんですけど、そういう形で拡張してしまうと、それはもう「真か偽か」だけでできている真理値 boolean value ではありません。


本当に十分形式化されている概念を実現する場合、拡張可能性はむしろ表現の直観的理解を阻害する気がします。

追記 (2009-01-04 01:52)

ブクマコメに反応。
>そういう話だと再帰があればループもいらない (id:titton さん)

ええと? すいませんどういう意図で書かれているのかわかりませんでした。
第一に「再帰があればループもいらない」は僕にとって何の違和感もなく真の命題です。僕は OCaml でループを書いたことがありませんぜ。
第二に「Bool インターフェイスは "拡張可能性を持つ(持ってしまう) 真理値"」ですが、 「ループは "拡張可能性を持った再帰"」ではないと思います。すべてのループは再帰呼び出しに変形できますよね(僕なんか間違えてます?)。