Interval
組込みオブジェクトこの章では組込み変数領域が初めから備えている
Interval
組込みオブジェクトを定義する。
Interval
のインスタンスは、区間を表す。
Interval
のメンバprototype
Enum.prototype
を準プロトタイプとするオブジェクト。name
"Interval"
Object
の内部メンバ$prototype
Type.prototype
Interval
の関数としての呼出しInterval
は関数として呼出し可能であり、
関数として呼出されると次の処理を行う:
NumberOfArgumentsError
のインスタンスを投げる。$prototype
内部メンバを作成し、Interval.prototype
をその値とする。inf
メンバを作成し、一つ目の引数をその値とする。sup
メンバを作成し、二つ目の引数をその値とする。containsInf
メンバを作成し、三つ目の引数を値とする。ただし、
渡された引数が三つに満たなければ、初期の Boolean.true
をメンバの値とする。三つ目の引数が真偽値オブジェクトでなければ、新しい ArgumentError
のインスタンスを投げる。containsSup
メンバを作成し、四つ目の引数を値とする。ただし、
渡された引数が四つに満たなければ、初期の Boolean.true
をメンバの値とする。
四つ目の引数が真偽値オブジェクトでなければ、新しい ArgumentError
のインスタンスを投げる。Interval
のインスタンスのプロパティInterval
のインスタンスは以下のプロパティを持つ。ただし、
Interval.prototype
のプロパティがスクリプトの実行によって変更された場合は、この限りではない。
inf
Interval
のインスタンスが表す区間の下限を表す。sup
Interval
のインスタンスが表す区間の上限を表す。containsInf
Interval
のインスタンスが表す区間の下限が区間に含まれているかどうかを表す。containsSup
Interval
のインスタンスが表す区間の上限が区間に含まれているかどうかを表す。contains
メソッド@[obj] {
@var a = @this.containsInf
? @bind @this.inf.$lessEqual : @bind @this.inf.$less;
@var b = @this.containsSup
? @bind @this.sup.$greaterEqual : @bind @this.sup.$greater;
@return $args.forAll[& a[#] && b[#]];
}
$equal
メソッド@[x] {
@return Interval.isTypeOf[x]
&& @this.inf == x.inf && @this.sup == x.sup
&& @this.containsInf == x.containsInf
&& @this.containsSup == x.containsSup;
}
getEnum
メソッドTypeError
のインスタンスを投げる。OutOfRangeError
のインスタンスを投げる。Integer
オブジェクトをその値の小さいものから順に一度づつ列挙する新しい開始列挙オブジェクトを作成し、E とする。(R が空集合ならば、何も列挙しない。
R が無限集合ならば、列挙は永遠に終わらない)TypeError
を投げる。区間の inf
プロパティが -@inf
の場合、すなわち区間が負の無限大の方に無限に伸びている場合は、
OutOfRangeError
を投げる。getRevEnum
メソッドTypeError
のインスタンスを投げる。OutOfRangeError
のインスタンスを投げる。Integer
オブジェクトをその値の大きいものから順に一度づつ列挙する新しい開始列挙オブジェクトを作成し、E とする。(R が空集合ならば、何も列挙しない。
R が無限集合ならば、列挙は永遠に終わらない)TypeError
を投げる。区間の sup
プロパティが @inf
の場合、すなわち区間が正の無限大の方に無限に伸びている場合は、
OutOfRangeError
を投げる。toNext
メソッド@{ @this.getEnum[].toNext[] }
toString
メソッドinf
・sup
プロパティを toString
メソッドで文字列に変換したものを含み、かつ containsInf
・containsSup
プロパティの値を反映しているのが望ましい。ここでは、区間に含まれる整数を求める操作 ints-in-interval を定義する。 ints-in-interval の結果が正常終了ならば、その値は整数の集合または特殊な値 null である。
オブジェクト O に対する ints-in-interval の動作は、次の通りとする:
Interval
のインスタンスでなければ、[[null]]
を返す。o.containsInf
? Math.ceil[o.inf]
: Math.floor[o.inf].$increment[]
を評価し、その結果を I とする。これが正常終了でなければ、
直ちにそれを返す。ただし、式の評価において部分式 o
の評価結果は [[O]] とする。o.containsSup
? Math.floor[o.sup] : Math.ceil[o.sup].$decrement[]
を評価し、その結果を S とする。これが正常終了でなければ、
直ちにそれを返す。Integer
オブジェクトならば、それが表す整数を i として、
Integer
オブジェクトならば、
それが表す整数を s として、[[i 以上 s
以下の全ての整数の集合]] を返す。Infinity
オブジェクトならば、[[i 以上の全ての整数の集合]]
を返す。Infinity
オブジェクトならば、[[整数の空集合]] を返す。Infinity
オブジェクトならば、[[整数の空集合]] を返す。Infinity
オブジェクトならば、
Integer
オブジェクトならば、
それが表す整数を s として、[[s
以下の全ての整数の集合]] を返す。Infinity
オブジェクトならば、[[全ての整数の集合]] を返す。Infinity
オブジェクトならば、[[整数の空集合]] を返す。