11. 数(Numbers)

Dylanは数種類の数値表現をサポートしている。これらの表現のクラスは 数学的な数の型に対応する抽象クラスの階層に配置される。抽象クラスは 直接のインスタンスは持たないが、特殊化には有用である。完全なクラス階層を下に示す。 抽象クラスは斜体で示す。シールドクラスは太文字で示す。

<single-float>, <double-float>,<extended-float> クラスはIEEE標準の浮動小数点形式を実現する。 [1].

自動型変換 (Automatic Type Conversion)

Dylanの自動型変換の規則は Common Lisp (X3J13)と同じである。すなわち、 浮動小数点の型合わせ(および比較に対する有理数の型合わせ)と有理数の正規化 (rational canonicalization)、引数の強制(coercions)は算術関数上の個々の メソッドにより実現される。

数値クラス (Numeric Classes)

<number>       [Abstract Class]
<real>            [Sealed Class]
<float>           [Sealed Class]
<single-float>       [Sealed Class]
<double-float>      [Sealed Class]
<extended-float>    [Sealed Class]
<rational>           [Sealed Class]
<ratio>                [Sealed Class]
<integer>            [Sealed Class]
<complex>          [Sealed Class]

一般算術関数 (General Arithmetic Functions)

性質(Properties)

odd? integer  => boolean  [Generic Function]
even? integer => boolean [Generic Function]
zero? number  => boolean  [Generic Function]
positive?  real  => boolean [Generic Function]
negative?  real  =>  boolean [Generic Function]
integral?  number  => boolean [Generic Function]

これらの関数は数の与えられた性質を調べて論理値を返す。

算術演算(Arithmetic Operations)

+ number1 number2  =>  number  [Generic Function]
* number1 number2  =>  number  [Generic Function]
- number1 number2  =>  number  [Generic Function]
/ number1 number2  =>  number  [Generic Function]

これらの関数は引数の和、積、差、商をそれぞれ返す。ゼロによる割算はエラーを発信する。

中置表現で関数を用いるときには、関数名(+, *, -, / )を用いよ。

5 + 6 * 4

これ以外のやり方、例えば新しいメソッドをつけ加えるときや関数引数として 渡すなどで関数を用いる時には、関数名の前にバックスラッシュをつけて用いよ。 (\+, \*, \-, \/ )

define class <my-number> (<number>) end class;

define method \+ (a :: <my-number>, b :: <my-number>)
  my-personal-addition-method(a, b);
end method;
negative number  =>  number  [Generic Function]
この関数は引数の加法に関する逆元を返す。1引数のマイナス演算子は negativeを呼び出すよう定義されている。
floor real  =>  integer real	[Generic Function]
ceiling real =>  integer real	[Generic Function]
round real =>  integer real	[Generic Function]
truncate real =>  integer real	[Generic Function]

これらの関数は同様に名付けられたCommon Lisp (X3J13) 関数の1引数の形式と同値である。

floor/ real1 real2 =>  integer real	[Generic Function]
ceiling/ real1 real2 =>  integer real  [Generic Function]
round/ real1 real2 =>  integer real	[Generic Function]
truncate/ real1 real2 =>  integer real [Generic Function]
これらの関数はCommon Lisp (X3J13)のfloor, ceiling, round, truncateの2引数の形式と同値である。ゼロによるわり算はエラーを発信する。

modulo real1 real2  =>  real  [Generic Function]
modulofloor/(real1,real2) の2番目の値を返す。

remainder   real1 real2  => real	[Generic Function]
remaindertruncate/(real1, real2) の2番目の値を返す。
number1 ^ integer2 => number [Generic Function]
number1integer2乗を返す。
abs   number =>  number   [Generic Function]
logior  #rest integers =>  integer	[Generic Function]
logxor  #rest integers =>  integer	[Generic Function]
logand  #rest integers =>  integer   [Generic Function]
lognot   integer =>  integer      [Generic Function]
logbit?  index integer => boolean [Generic Function]
ash   integer count =>  integer   [Generic Function]
総称関数abs, logior, logxor, logand, lognot, ash は Common Lispでの定義と同様。 logbit?は Common Lispのlogbitpと同値。
rationalize  number =>  number  [Generic Function]
numerator    number =>  number  [Generic Function]
denominator  number =>  number  [Generic Function]
総称関数rationalize, numerator, denominatorRevised^4 Report on Schemeでの定義と同様。
lcm   integer1 integer2  =>  integer   [Generic Function]
gcd   integer1 integer2  =>  integer   [Generic Function]
これらの関数はinteger1integer2の最小公倍数と最大公約数を それぞれ返す。
min real #rest more-reals => real [Function]
max real #rest more-reals => real [Function]
minは最も小さい(負の無限大に最も近い)引数を返す。 maxは最も大きい(正の無限大に最も近い)引数を返す。 これらのメソッドは<を呼ぶことで作用する。
[1]一つ例外がある。すなわち、 NaN上では比較演算子が IEEE流には動作しない可能性がある。
目次 索引 その他の操作(次章)