真偽値の大小比較 [言語比較]
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 だ。
順序があるとソートできて便利
by NO NAME (2007-06-27 14:53)