Interval 組込みオブジェクトこの章では組込み変数領域が初めから備えている
Interval 組込みオブジェクトを定義する。
Interval のインスタンスは、区間を表す。
Interval のメンバprototypeEnum.prototype
を準プロトタイプとするオブジェクト。name"Interval"Object の内部メンバ$prototypeType.prototypeInterval の関数としての呼出しInterval は関数として呼出し可能であり、
関数として呼出されると次の処理を行う:
NumberOfArgumentsError のインスタンスを投げる。$prototype 内部メンバを作成し、Interval.prototype をその値とする。inf
メンバを作成し、一つ目の引数をその値とする。sup
メンバを作成し、二つ目の引数をその値とする。containsInf
メンバを作成し、三つ目の引数を値とする。ただし、
渡された引数が三つに満たなければ、初期の Boolean.true をメンバの値とする。三つ目の引数が真偽値オブジェクトでなければ、新しい ArgumentError のインスタンスを投げる。containsSup
メンバを作成し、四つ目の引数を値とする。ただし、
渡された引数が四つに満たなければ、初期の Boolean.true をメンバの値とする。
四つ目の引数が真偽値オブジェクトでなければ、新しい ArgumentError
のインスタンスを投げる。Interval のインスタンスのプロパティInterval のインスタンスは以下のプロパティを持つ。ただし、
Interval.prototype
のプロパティがスクリプトの実行によって変更された場合は、この限りではない。
infInterval のインスタンスが表す区間の下限を表す。supInterval のインスタンスが表す区間の上限を表す。containsInfInterval
のインスタンスが表す区間の下限が区間に含まれているかどうかを表す。containsSupInterval
のインスタンスが表す区間の上限が区間に含まれているかどうかを表す。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
オブジェクトならば、[[整数の空集合]] を返す。