以前同じような議論をした記憶が。

In article <42328fca.7081%katoh@pop12.odn.ne.jp>
        Hideki Kato <katoh@pop12.odn.ne.jp> writes:
> && や || は,一方の値に依っては,残りを計算しなくても全体の値が決まると
> いう,その演算の(ある意味特殊な)性質を利用しているので,?: 演算子とは
> 若干性質が異なるように思えます.例えば,& や | の仲間の ^ (exclusive or) 
> にはこれは適用できません.

&& と &、|| と | は全く異なる演算子なんで、^ を持ち出しても無意味です。

> もちろん,?: に後ろの二項とも評価するように操作的な意味を与える事は可能
> で,それをしなかったのは何故か,という話なら,Cの場合は,実行速度最優先
> で設計したから,ということだと思います.

おそらく、algol60の条件式(if 条件式 then 式 else 式)由来だと思います。
excelのセル関数IFはTHEN部もELSE部も必ず評価するので使いにくいことこの上なし。

> 蛇足ですが,Lisp で and や or を cond の代わりに使うのは,私は,邪道(あ
> るいは,トリッキーで真っ当なプログラマーはやるべきではないこと)だと思い
> ます.

and,or は全引数を評価してからand/or演算をする仕様であっても動作するように
書くべきという考えでしょうか。condだけ対象外な理由がわかりません。
perlで、hogehoge or die というのをよく見かけますが、あれも邪道だと思いますか?

# Cでも 0||3 が1でなく3になればすっきりすると思いますが。
-- 
tksotn