OOTANI TAKASHI <tksotn@anet.ne.jp> writes:

> 新しい言語はあまり知らないのですが、Boolean 以外の値に && || が使える言語で
> 結果に Boolean しか返さない言語って C類 の他にメジャーな範囲では何があります?
> (Cの場合Booleanじゃないという突っ込みはしないでください)

&&, || のような短絡評価をする演算子、というのがそもそも(Lisp以外の)古
い言語には少ないのではないでしょうか。「副作用と値の両方を使う式」が前
提の仕様なので、関数型言語やAlgolなどの「きれいな」言語にはありえない
でしょうし。

論理積、論理和という意味だと、論理型以外を受け付けるのがそもそもおかし
な感じなので、強い型の言語では少ないでしょうね。Algol/Pascal系も
Javaも関数型言語も「論理型と論理型から論理型を返す演算子」ですよね。

> かなり前になりますが、fj のどこかで、
> (1) && || 演算子は、左辺の値によって右辺が評価されたりされなかったり
>    するのが演算子の意味として本質的である
> (2) && || 演算子は、論理演算処理が本質的であり、右辺が評価されたり
>    されなかったりは、最適化/高速化のために過ぎない
> という議論をした覚えがあります。
> 私は(1)の立場。
> andthen orelse というふうに(1)であることがよくわかる演算子の言語もありましたね。
> ADAだっけ?

Ada の短絡評価演算子は and then, or else と2トークンですね。短絡評価し
ない(左右どちらを先に評価するとも決まっていない)andとorも別にあります。

(1)と(2)は、別の概念なので両方用意したということでしょう。いかにもAda
らしいですね。

                                前田敦司