List 組込みオブジェクト

この章では組込み変数領域が初めから備えている List 組込みオブジェクトを定義する。

List はスクリプトで扱われる可変長リスト (配列) オブジェクト に対応する Type のインスタンスである。

リストオブジェクト

以下の条件を全て満たすオブジェクトをリストオブジェクトという:

リストオブジェクトは、有限個のオブジェクトを順序付きで保持する 抽象データ構造を表す。リストオブジェクトが保持する各オブジェクト (elements 内部メンバの値が含むデータ) をリストオブジェクトの要素という。 リストの要素は一意の (重複のない) 番号によって識別する。この番号をインデックスという。インデックスは要素が elements 内部メンバの値の何番目に含まれているかを表しており、1 以上で要素の個数以下の整数である。

一般にリストの内容は読み取り専用ではなく、要素の個数も自由に変化する。しかし リストオブジェクトの isReadOnly プロパティBoolean.true を設定すると、リストは読み取り専用とみなされる。

リストオブジェクトは、少なくとも作られた当初は List のインスタンスでなければならない (List.prototype 自身がリストオブジェクトと見なされる場合を除く)。 リストオブジェクトのプロトタイプが変更されて List のインスタンスではなくなった場合、それ以降そのオブジェクトを リストオブジェクトと見なすかどうかは実行環境の裁量による。

List のメンバ

prototype
Enum.prototype を準プロトタイプとするオブジェクト。
name
文字列オブジェクト "List"
of メソッド
関数として呼出されると次の処理を行う:
  1. 呼出しで渡された全ての引数を、渡された順序のまま含む原始リストe とする。
  2. eelements 内部メンバの値とする 読み取り専用でない新しいリストオブジェクトを作成し、それを L とする。
  3. [[L]] を返す。
このメソッドは、 引数として渡された各オブジェクトを要素とする新しい配列オブジェクトを返す。
concat メソッド
関数として呼出されると、引数が全てリストオブジェクトならば (引数が 0 個の場合を含む)、次の処理を行う:
  1. 引数のリストオブジェクトの elements 内部メンバの値を 渡された引数の順に e1, e2, …, en とする。(n は引数の個数)
  2. e1[1], e1[2], …, e1[e1.count], e2[1], e2[2], …, e2[e2.count], ……, en[1], en[2], …, en[en.count] を含む原始リストe′ とする。n = 0 ならば、e′ は 0 個のオブジェクトを含む原始リストである。
  3. e′ を elements 内部メンバの値とする 読み取り専用でない新しいリストオブジェクトを作成し、それを L とする。
  4. [[L]] を返す。
引数にリストオブジェクトでないオブジェクトが含まれている場合の動作は規定しない。
このメソッドは、 引数として渡された各配列オブジェクトを連結し、 一つの新しい配列オブジェクトとして返す。

List の内部メンバ

$prototype
Type.prototype

List の関数としての呼出し

List は関数として呼出し可能であり、関数として呼出されると次の処理を行う:

  1. 呼出しで渡された引数がなければ、[[0 個の要素を持つ読み取り専用でない 新しいリストオブジェクト]] を返す。
  2. 呼出しで渡された引数が一つのリストオブジェクトなら、[[以下の条件を全て満たす 新しいリストオブジェクト]] を返す:
  3. 呼出しで渡された引数の数が一つまたは二つで、一つ目が Real オブジェクトならば、以下の動作を行う:
    1. そのオブジェクトに対して real-to-int を行い、その結果を c とする。c が null または負数ならば、新しい OutOfRangeError のインスタンスを投げる。
    2. 二つ目の引数があればそれを O とする。なければ初期の Void.voidO とする。
    3. O のみを含む原始リストを e とする。ただし、e.count = c とする。
    4. eelements 内部メンバの値とする 読み取り専用でない新しいリストオブジェクトを作成し、それを L とする。
    5. [[L]] を返す。
  4. これ以降の動作は規定しない。

リストオブジェクトのプロパティ

リストオブジェクトは以下のプロパティを持つ。ただし、 List.prototype やその準プロトタイプのプロパティが スクリプトの実行によって変更された場合は、この限りではない。

count
このプロパティの値は、Integer オブジェクトである。この値は、このリストオブジェクトの現在の elements 内部メンバの値に含まれている要素の個数を表す。
このプロパティを削除しようとすると、UnsupportedOperationError のインスタンスが投げられる。
このプロパティに対してオブジェクト N が代入されるとき、次の動作を行う:
  1. NReal オブジェクトでなければ、新しい TypeError のインスタンスを投げる。
  2. N に対して real-to-int を行い、その結果を n とする。n が null または負数ならば、新しい OutOfRangeError のインスタンスを投げる。
  3. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  4. このリストオブジェクトが isReadOnly 内部メンバを持つならば、 新しい ReadOnlyError のインスタンスを投げる。
  5. e.count < n ならば、
    1. n 個の要素からなる新たな原始リストを e′ とする。この原始リストの最初の e.count 個の要素は、e の各要素にそれぞれ一致する。残りの (ne.count) 個の要素は、すべて初期の Void.void である。
    2. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  6. e.count > n ならば、
    1. n 個の要素からなる新たな原始リストを e′ とする。この原始リストの要素は、e の最初の n 個の要素にそれぞれ一致する。
    2. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  7. [[N]] を返す。
count プロパティに整数を代入する ことによって、リストオブジェクトの要素数を変更できる。要素数が減少する場合、 リストの最後の方にある余った要素はリストから削除される。要素数が増加する場合、 足りない要素を補うためにリストの最後の方に @void が追加される。 負の要素数を設定しようとすると OutOfRangeError エラーが、 リストが読み取り専用の場合は ReadOnlyError エラーが投げられる。
isReadOnly
このプロパティの値はリストが読み取り専用であるかどうかを表す。
このリストオブジェクトが isReadOnly 内部メンバを持つならば、 このプロパティの値は初期の Boolean.true である。さもなくば、このプロパティの値は初期の Boolean.false である。
このプロパティを削除しようとすることは、このプロパティに対して初期の Boolean.false を代入することと同じように処理される。
このプロパティに対してオブジェクト N が代入されるとき、次の動作を行う:
  1. N が初期の Boolean.true ならば、
    1. このリストオブジェクトが isReadOnly 内部メンバを持たなければ、isReadOnly 内部メンバを作成し N をその値に設定する。
    2. [[N]] を返す。
  2. N が初期の Boolean.false ならば、
    1. このリストオブジェクトが isReadOnly 内部メンバを持つならば、新しい ReadOnlyError のインスタンスを投げる。
    2. [[N]] を返す。
  3. 新しい TypeError のインスタンスを投げる。
このプロパティに @true を代入することで、 リストを読み取り専用にすることができる。一度読み取り専用になったリストを 元の状態に戻すことは出来ない。
insert メソッド
2-ary メソッド。関数として呼出されると、次の動作を行う:
  1. 渡された引数が一つもなければ新しい NumberOfArgumentsError のインスタンスを投げる。さもなくば一つ目の引数を I とする。
  2. 初期の Void.void を @this 値、I を唯一の引数として、Math.ceil を関数として呼出し、その結果に対して get-reference-value を行い、その結果を r とする。
  3. r が正常終了でなければ、直ちにそれを返す。
  4. r の値が Integer オブジェクトならば、そのオブジェクトが表す整数と 1 との最大値を i とする。さもなくば、新しい TypeError のインスタンスを投げる。
  5. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  6. e.count < i − 1 ならば、e の末尾に 初期の Void.void を適当な個数だけ追加して、要素数を i − 1 にした原始リストを改めて e とする。
  7. 呼出しで渡された二つ目以降の全ての引数を a1, a2, …, an とする。
  8. e[1], e[2], …, e[i − 1], a1, a2, …, an, e[i], e[i + 1], …, e[e.count] を含む原始リストを e′ とする。
  9. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  10. [[このリストオブジェクト]] を返す。
このメソッドは、一つ目の引数で指示されたインデックスの 直前に、二つ目以降の引数を挿入する。
append メソッド
push メソッド
1-ary メソッド。関数として呼出されると、次の動作を行う:
  1. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  2. 呼出しで渡された全ての引数を a1, a2, …, an とする。
  3. e[1], e[2], …, e[e.count], a1, a2, …, an を含む原始リストを e′ とする。
  4. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  5. [[このリストオブジェクト]] を返す。
このメソッドは、 引数をこのリストオブジェクトの要素としてリストの末尾に追加する。
pop メソッド
0-ary メソッド。関数として呼出されると、次の動作を行う:
  1. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  2. e.count = 0 ならば [[初期の Void.void]] を返す。
  3. e[1], e[2], …, e[e.count − 1] を含む原始リストを e′ とする。
  4. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  5. [[ e[e.count] ]] を返す。
このメソッドは リストオブジェクトの最後の要素をリストから削除し、返す。
prepend メソッド
unshift メソッド
1-ary メソッド。関数として呼出されると、次の動作を行う:
  1. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  2. 呼出しで渡された全ての引数を a1, a2, …, an とする。
  3. a1, a2, …, an, e[1], e[2], …, e[e.count] を含む原始リストを e′ とする。
  4. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  5. [[このリストオブジェクト]] を返す。
このメソッドは、 引数をこのリストオブジェクトの要素としてリストの先頭に追加する。
shift メソッド
0-ary メソッド。関数として呼出されると、次の動作を行う:
  1. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  2. e.count = 0 ならば [[初期の Void.void]] を返す。
  3. e[2], e[3], …, e[e.count] を含む原始リストを e′ とする。
  4. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  5. [[ e[1] ]] を返す。
このメソッドは リストオブジェクトの最初の要素をリストから削除し、返す。
reverse メソッド
0-ary メソッド。関数として呼出されると、次の動作を行う:
  1. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  2. e[e.count], e[e.count − 1], …, e[2], e[1] を含む原始リストを e′ とする。
  3. このリストオブジェクトの elements 内部メンバの値を、e′ に変更する。
  4. [[このリストオブジェクト]] を返す。
このメソッドは、リストオブジェクトの要素の順序を逆転し、 リストオブジェクトを返す。
concat メソッド
関数として呼出したとき、@this 値および全ての引数がリストオブジェクトならば、 その @this 値と全ての引数を引数として List.concat を関数として呼出し、その結果を返す。
copy メソッド
0-ary メソッド。関数として呼出されると、[[以下の条件を全て満たす 新しいリストオブジェクト]] を返す:
このメソッドは、 例えば次の関数生成式を評価して得られるような関数オブジェクトとして実装できる: @{ List[@this] }
findIndex メソッド
1-ary メソッド。関数として呼出されると、次の動作を行う:
  1. 呼出しで渡された引数が一つまたは二つでなければ新しい NumberOfArgumentsError のインスタンスを投げる。さもなくば一つ目の引数を P とする。
  2. P が関数として呼出し可能でなければ、新しい NotCallableError のインスタンスを投げる。
  3. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  4. 二つ目の引数があれば、それを I として、次の動作を行う:
    1. 初期の Void.void を @this 値、I を唯一の引数として、Math.ceil を関数として呼出し、その結果に対して get-reference-value を行い、その結果を r とする。
    2. r が正常終了でなければ、直ちにそれを返す。
    3. r の値が Integer オブジェクトならば、そのオブジェクトが表す整数と 1 との最大値を i とする。さもなくば、新しい TypeError のインスタンスを投げる。
    二番目の引数がなければ、i = 1 とする。
  5. *1: i > e.count ならば、[[NaN オブジェクト]] を返す。
  6. 初期の Void.void を @this 値、e[i] を唯一の引数として、P を関数として呼出し、その結果に対して get-reference-value を行い、その結果を r とする。
  7. r が正常終了でなければ、直ちにそれを返す。
  8. r の値に対して to-boolean 操作を行い、その結果が true ならば、[[整数 i を表す Integer オブジェクト]] を返す。
  9. i を 1 増やして、ie.count との比較 (*1) に戻る。
ただし、関数の呼出しが完了するまでにリストオブジェクトの elements 内部メンバの値が変化したならば、それ以降の動作は未定義とする。

このメソッドは、一つ目の引数を述語関数と見なして、 リストの要素のうちその述語を満たす最初のもののインデックスを返す。 二番目の引数でインデックスを指定すると、そのインデックス以降についてのみを 検索の対象とする。述語を満たす要素がない場合は @nan を返す。

例えば以下のコードでは、リストには整数 1, 10, 100, 1000 が含まれており、 述語として 50 より大きいを指定している。この述語を満たす最初の要素は 100 であり、そのインデックスは 3 であるから、findIndex メソッドの結果は 3 となる。

List.of[1, 10, 100, 1000].findIndex[& # > 50 ]
findLastIndex メソッド
1-ary メソッド。関数として呼出されると、次の動作を行う:
  1. 呼出しで渡された引数が一つまたは二つでなければ新しい NumberOfArgumentsError のインスタンスを投げる。さもなくば一つ目の引数を P とする。
  2. P が関数として呼出し可能でなければ、新しい NotCallableError のインスタンスを投げる。
  3. このリストオブジェクトの現在の elements 内部メンバの値を e とする。
  4. 二つ目の引数があれば、それを I として、次の動作を行う:
    1. 初期の Void.void を @this 値、I を唯一の引数として、Math.floor を関数として呼出し、その結果に対して get-reference-value を行い、その結果を r とする。
    2. r が正常終了でなければ、直ちにそれを返す。
    3. r の値が Integer オブジェクトならば、そのオブジェクトが表す整数と e.count との最小値を i とする。さもなくば、新しい TypeError のインスタンスを投げる。
    二番目の引数がなければ、i = e.count とする。
  5. *1: i < 1 ならば、[[NaN オブジェクト]] を返す。
  6. 初期の Void.void を @this 値、e[i] を唯一の引数として、P を関数として呼出し、その結果に対して get-reference-value を行い、その結果を r とする。
  7. r が正常終了でなければ、直ちにそれを返す。
  8. r の値に対して to-boolean 操作を行い、その結果が true ならば、[[整数 i を表す Integer オブジェクト]] を返す。
  9. i を 1 減らして、i と 1 との比較 (*1) に戻る。
ただし、関数の呼出しが完了するまでにリストオブジェクトの elements 内部メンバの値が変化したならば、それ以降の動作は未定義とする。

このメソッドは、一つ目の引数を述語関数と見なして、 リストの要素のうちその述語を満たす最後のもののインデックスを返す。 二番目の引数でインデックスを指定すると、そのインデックス以前についてのみを 検索の対象とする。述語を満たす要素がない場合は @nan を返す。

find メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @{ @this[@this.findIndex[[$args]]] }
このメソッドは findIndex メソッドと 同様に述語を満たす要素を検索するが、インデックスではなくて要素そのものを返す点が 異なる。
findLast メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @{ @this[@this.findLastIndex[[$args]]] }
このメソッドは findLastIndex メソッドと 同様に述語を満たす要素を検索するが、インデックスではなくて要素そのものを返す点が 異なる。
indexOf メソッド
次の関数生成式を評価して得られるような関数オブジェクト:
@[obj] {
   $args[1] = @bind obj.$equal;
   @return @this.findIndex[[$args]];
}
このメソッドは、リストの要素のうち引数に等しい 最初のもののインデックスを返す。二番目の引数でインデックスを指定すると、 そのインデックス以降についてのみを検索の対象とする。引数に等しい要素がない場合は @nan を返す。オブジェクトが等しいかどうかの判定は == によって行う。
lastIndexOf メソッド
次の関数生成式を評価して得られるような関数オブジェクト:
@[obj] {
   $args[1] = @bind obj.$equal;
   @return @this.findLastIndex[[$args]];
}
このメソッドは、リストの要素のうち引数に等しい 最後のもののインデックスを返す。二番目の引数でインデックスを指定すると、 そのインデックス以前についてのみを検索の対象とする。引数に等しい要素がない場合は @nan を返す。オブジェクトが等しいかどうかの判定は == によって行う。
contains メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[obj] { $args.forAll[@bind @this.indexOf] }
このメソッドは、 引数全てがこのリストオブジェクトに含まれているかどうかを調べる。
getEnum メソッド
関数として呼びだされると、[[新しい開始列挙オブジェクト]] を返す。この列挙オブジェクトによる列挙操作は、 このリストオブジェクトの要素を番号の若い順に一度づつ列挙する。ただし、 列挙操作が完了する (列挙オブジェクトの toNext メソッドnull を返す) までに このリストオブジェクトの elements 内部メンバが変更された場合は、 それ以降の列挙操作の挙動は規定しない。
このメソッドは、 例えば次の関数生成式を評価して得られるような関数オブジェクトとして実装できる:
@{
   @var toNext = @{
      @this.index ||= 0;
      @if ++@this.index > #source.count:
         @return @null;
      @this.item = #source[@this.index];
      @return @this;
   };
   @return Enum[toNext, @this];
}
getCyclicEnum メソッド
関数として呼びだされると、[[新しい開始列挙オブジェクト]] を返す。この列挙オブジェクトによる列挙操作は、 このリストオブジェクトの要素を番号の若い順に列挙する。リストの最後の要素まで 列挙すると、リストの最初の要素に戻って列挙を続ける。ただし、 このリストオブジェクトの elements 内部メンバが変更された場合は、 それ以降の列挙操作の挙動は規定しない。また、リストオブジェクトの要素が一つも 存在しないときは、列挙オブジェクトは何も列挙しない。
このメソッドは、 例えば次の関数生成式を評価して得られるような関数オブジェクトとして実装できる:
@{
   @var toNext = @{
      @if #source.count == 0:
         @return @null;
      @this.index ||= 0;
      @if ++@this.index > #source.count:
         @this.index = 1;
      @this.item = #source[@this.index];
      @return @this;
   };
   @return Enum[toNext, @this];
}
toNext メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @{ @this.getEnum[].toNext[] }
toString メソッド
0-ary メソッド。リストオブジェクトを @this 値として関数として呼び出されると、渡された @this 値を文字列に変換し、その文字列を内容とする文字列オブジェクトを値とする正常終了の結果を返す。文字列への変換の方法は実行環境に任せるが、 リストオブジェクトに含まれている各オブジェクトを文字列に変換したものがそれぞれ 含まれているのが望ましい。

リストオブジェクトの内部メンバ

$prototype
List.prototype、または List.prototype を準プロトタイプとするオブジェクト。
elements
任意個のオブジェクトを含む原始リスト。この原始リストはリストオブジェクトの内容を保持する。
isReadOnly
この内部メンバが存在するならばリストオブジェクトは読み取り専用である。

リストオブジェクトの関数としての呼出し

リストオブジェクトは関数として呼出し可能である。 リストオブジェクトが関数として呼出されると次の処理を行う:

  1. 関数として呼出されたこの List のインスタンスを L とする。
  2. 渡された引数の個数が一つでなければ、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. 渡された引数を A とする。
  4. A が初期の Void.void または初期の Null.null または NaN オブジェクトならば、 [[初期の Void.void]] を返す。
  5. AReal オブジェクトならば、以下の動作を行う:
    1. A に対して real-to-int を行い、その結果を i とする。ただし、結果が null のときは i = −1 とする。
    2. [[Li に対応するリスト要素参照]] を返す。
  6. A に対して ints-in-interval を実行し、その結果を I とする。I が正常終了でなければ直ちにそれを返す。
  7. I の値を R とする。R が null でなければ、 [[LR に対応するリスト範囲参照]] を返す。
  8. AEnum のインスタンスならば、式 a.map[l].toList[] を評価し、その結果を返す。ただし、この式における部分式 a の評価結果は [[A]] とし、部分式 l の評価結果は [[L]] とする。
  9. これ以降の動作は、未定義である。

リスト要素参照

リスト要素参照参照の一種である。全てのリスト要素参照は、それぞれ対応する リストオブジェクト L と整数 i を持つ。

リスト要素参照に対する動作を以下に定める:

check-reference-value
  1. L の現在の elements 内部メンバの値を e とする。
  2. 0 < ie.count ならば、[[初期の Boolean.true]] を返す。さもなくば [[初期の Boolean.false]] を返す。
get-reference-value
  1. L の現在の elements 内部メンバの値を e とする。
  2. 0 < ie.count ならば、[[ e[i] ]] を返す。さもなくば [[初期の Void.void]] を返す。
set-reference-value
  1. set-reference-value の対象となるオブジェクトを O とする。
  2. L の現在の isReadOnly プロパティの値が初期の Boolean.true ならば、新しい ReadOnlyError のインスタンスを投げる。
  3. i ≤ 0 ならば、新しい OutOfRangeError のインスタンスを投げる。
  4. L の現在の elements 内部メンバの値を e とする。
  5. Lelements 内部メンバの値を、新しい原始リスト e′ に変更する。e′ に含まれる k 個目のオブジェクトは、
    k = i ならば
    O
    ki かつ 0 < ke.count ならば
    e[k]
    e.count < k < i ならば
    初期の Void.void
    とする。これにより、e′ には max(e.count, i) 個の要素が含まれることになる。
  6. [[O]] を返す。
delete-reference-value
  1. L の現在の isReadOnly プロパティの値が初期の Boolean.true ならば、新しい ReadOnlyError のインスタンスを投げる。
  2. L の現在の elements 内部メンバの値を e とする。
  3. 0 < ie.count ならば、
    1. Lelements 内部メンバの値を、新しい原始リスト e′ に変更する。e′ に含まれる k 個目のオブジェクトは、
      0 < k < i ならば
      e[k]
      ik < e.count ならば
      e[k + 1]
      とする。これにより、e′ には max(0, e.count − 1) 個の要素が含まれることになる。
    2. [[ e[i] ]] を返す。
  4. [[初期の Void.void]] を返す。

リスト範囲参照

リスト範囲参照参照の一種である。全てのリスト範囲参照は、それぞれ対応する リストオブジェクト L と整数の集合 R を持つ。

リスト範囲参照に対する動作を以下に定める:

check-reference-value
  1. [[初期の Boolean.true]] を返す。
get-reference-value
  1. L の現在の elements 内部メンバの値を e とする。1 以上 e.count 以下の整数の集合と R との積集合を R′ とする。
  2. R′ が空集合ならば、[[0 個の要素を持つ読み取り専用でない新しいリストオブジェクト]] を返す。ただし、 この新しいリストオブジェクトのプロトタイプは L とする。
  3. R′ に含まれている整数の最小値を m、最大値を n とする。
  4. e[m], e[m + 1], …, e[n] を含む原始リストelements 内部メンバの値とする 読み取り専用でない新しいリストオブジェクトを作成し、それを L′ とする。ただし、L′ のプロトタイプは L とする。
  5. [[L′]] を返す。
set-reference-value
  1. set-reference-value の対象となるオブジェクトを O とする。
  2. L の現在の elements 内部メンバの値を e とする。
  3. L の現在の isReadOnly プロパティの値が初期の Boolean.true ならば、新しい ReadOnlyError のインスタンスを投げる。
  4. R が空集合ならば、直ちに [[O]] を返す。
  5. R に 0 以下の整数が含まれているならば、新しい OutOfRangeError のインスタンスを投げる。
  6. R に含まれている整数の最小値を m、最大値を n とする。ただし、最大値が存在しなければ (すなわち R が無限集合ならば) 新しい OverflowError のインスタンスを投げる。
  7. e.count < m − 1 ならば、e の末尾に 初期の Void.void を適当な個数だけ追加して、要素数を m − 1 にした原始リストを改めて e とする。
  8. O がリストオブジェクトでなければ、以下の動作を行う:
    • n < e.count ならば、 e[1], e[2], …, e[m − 1], O, …, O, e[n + 1], e[n + 2], …, e[e.count] を含む原始リストを e″ とする。 ただし、e″.count = e.count となるようにする。
    • e.count ≤ n ならば、 e[1], e[2], …, e[m − 1], O, …, O を含む原理リストを e″ とする。 ただし、e″.count = n となるようにする。
    O がリストオブジェクトならば、O の現在の elements 内部メンバの値を e′ として、以下の動作を行う:
    • n < e.count ならば、 e[1], e[2], …, e[m − 1], e′[1], e′[2], …, e′[e′.count], e[n + 1], e[n + 2], …, e[e.count] を含む原始リストを e″ とする。
    • e.count ≤ n ならば、 e[1], e[2], …, e[m − 1], e′[1], e′[2], …, e′[e′.count] を含む原理リストを e″ とする。
  9. Lelements 内部メンバの値を、e″ に変更する。
  10. [[O]] を返す。
delete-reference-value
  1. L の現在の isReadOnly プロパティの値が初期の Boolean.true ならば、新しい ReadOnlyError のインスタンスを投げる。
  2. L の現在の elements 内部メンバの値を e とする。1 以上 e.count 以下の整数の集合と R との積集合を R′ とする。
  3. R′ が空集合ならば、[[0 個の要素を持つ読み取り専用でない新しいリストオブジェクト]] を返す。ただし、 この新しいリストオブジェクトのプロトタイプは L とする。
  4. R′ に含まれている整数の最小値を m、最大値を n とする。
  5. e[m], e[m + 1], …, e[n] を含む原始リストelements 内部メンバの値とする 読み取り専用でない新しいリストオブジェクトを作成し、それを L′ とする。ただし、L′ のプロトタイプは L とする。
  6. e[1], e[2], …, e[m − 1], e[n + 1], e[n + 2], …, e[e.count] を含む原理リストを e′ とする。
  7. Lelements 内部メンバの値を、e′ に変更する。
  8. [[L′]] を返す。
© 2006-2007 Magicant