Re: || について (Re: フレーム非対応のブラウザについて (|| について)
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
らしいですね。
前田敦司
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735