SSブログ

真偽値の大小比較 [言語比較]

Ruby

irb(main):001:0> true > false
NoMethodError: undefined method `>' for true:TrueClass
        from (irb):1

Python

>>> True > False
True
>>> True < False
False

OCaml

# true > false;;
- : bool = true
# true < false;;
- : bool = false

SML

- true > false;
stdIn:1.6 Error: overloaded variable not defined at type
  symbol: >
  type: bool

uncaught exception Error
  raised at: ../compiler/TopLevel/interact/evalloop.sml:52.48-52.56
             ../compiler/TopLevel/interact/evalloop.sml:35.55

Haskell

Hugs.Base> True > False
True
Hugs.Base> True < False
False

Scala

scala> true > false
unnamed0: Boolean = true

scala> true < false
unnamed1: Boolean = false

Lua

> if true > false then  end
stdin:1: attempt to compare two boolean values
stack traceback:
        stdin:1: in main chunk
        [C]: ?

Scheme (Gauche)

gosh> (> #t #f)
*** ERROR: real number required: #t
Stack Trace:
_______________________________________

Common Lisp (SBCL)

* (> T NIL)

debugger invoked on a TYPE-ERROR: The value T is not of type NUMBER.

Windows PowerShell

PS C:\> $a; $a.getType()
True

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Boolean                                  System.ValueType


PS C:\> $b; $b.getType()
False

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Boolean                                  System.ValueType


PS C:\Documents and Settings\ether> if ($a > $b) { echo "True > False"} else { echo "True < False" }
True < False

Erlang

Eshell V5.5.5  (abort with ^G)
1> true > false.
true
2> true < false.
false

JavaScript

js> true > false
true
js> true < false
false

Excel 関数

PHP

PS D:\> cat tryme.php
<?php
  if (true > false) { echo "true > false\n"; }
  if (true < false) { echo "true < false\n"; }
?>
PS D:\> php tryme.php
true > false

真偽値が組み込み型でないような言語は実験から除外している。
まとめると、

真偽値は大小比較できる:
Python, OCaml, Haskell, Scala, PowerShell, Erlang, JavaScript, Excel, PHP

真偽値は大小比較できない:
Ruby, SML, Lua, Scheme, Common Lisp,

直感的には真偽値に大小なんてない気がするので大小比較できるほうが多数派っぽいというのにやや驚き。

特に Haskell なんかは「Bool 型って Ord クラスでしょ」っていうのを設計者が明示的に決定したであろうわけで、その意図が知りたい気がする。

なお大小比較できるもののうち Windows PowerShell だけは真<偽となるという点で特異だが、これは PowerShell はシェル言語なのでコマンドの成功が 0 であり、失敗がそれ以外であるという慣習とあわせたい部分があるのだと思う。
Unix のシェルでも true コマンドの戻り値は 0 で false コマンドの戻り値は 1 だ。


nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

NO NAME

順序があるとソートできて便利
by NO NAME (2007-06-27 14:53) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。