Tensor 組込みオブジェクト

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

Tensor はスクリプトで扱われるテンソルオブジェクトに対応する Type のインスタンスである。

テンソルオブジェクト

以下の条件を全て満たすオブジェクトをテンソルオブジェクトという:

テンソルオブジェクトは、インデックスにより区別される有限個のオブジェクトの 集合体を表す。テンソルオブジェクトの elements 内部メンバの値に 含まれる各オブジェクトをテンソルオブジェクトの要素といい、 dims 内部メンバの値をテンソルオブジェクトのという。

一般にテンソルオブジェクトの内容は読み取り専用ではないが、テンソル オブジェクトの isReadOnly プロパティBoolean.true を設定すると、テンソルオブジェクトの要素は読み取り専用とみなされる。 読み取り専用であるかどうかに関わらず、テンソルオブジェクトの型は そのテンソルオブジェクトについて不変である。

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

テンソル原始リスト

n を 1 以上の整数とし、n 個の 0 以上の整数 d1, d2, …, dn からなる原始リストd とする。原始リスト l が以下の条件を満たすとき、ldとするテンソル原始リストである:

またこの時、nl階数という。すなわち、 ln 階のテンソル原始リストである。

さらに n 個の整数 i1, i2, …, inl有効なインデックスであるとは、1 以上 n 以下の任意の整数 k について 1 ≤ ikdk が成り立つことである。

テンソル生成式の評価

テンソル生成式 Tensor: LeftBrace Expressions? Comma? RightBrace の評価は、次のように行う:

  1. Tensor の中に Expressions が含まれていなければ、空の原始リストを e とする。
  2. Tensor の中に Expressions が含まれていれば、それを評価する。 その結果が正常終了でなければ、直ちにそれを返す。正常終了ならば、 その値となっている原始リストを e とする。
  3. e は 1 階のテンソル原始リストであるはずである。eelements 内部メンバの値とする、読み取り専用でない 新しいテンソルオブジェクトを T とする。
  4. [[T]] を返す。

テンソル生成式 Tensor: LeftBrace (&MatrixTester Expressions Comma? EOS)+ RightBrace の評価は、次のように行う:

  1. Tensor の中に含まれる Expressions の個数を n とし、それらの Expressions を E1, E2, …, En とする。
  2. i = 1, 2, …, n について、i = 1 から i = n まで順に以下の動作を行う: Ei を評価し、その結果が正常終了でなければ直ちに その結果を返す。正常終了ならばその値となっている原始リストを ei とする。
  3. e1, e2, …, en を内容とする原始リストを e とする。
  4. e は 2 階のテンソル原始リストであるはずである。eelements 内部メンバの値とする、読み取り専用でない 新しいテンソルオブジェクトを T とする。
  5. [[T]] を返す。

Tensor のメンバ

prototype
Object.prototype を準プロトタイプとするオブジェクト。
name
文字列オブジェクト "Tensor"
map メソッド
2-ary メソッド。関数として呼出されると、以下の処理を行う:
  1. 呼出しで渡された引数が一つもなければ、新しい NumberOfArgumentsError のインスタンスを投げる。
  2. 一つ目の引数を F とする。F が関数として呼出し可能でなければ、新しい NotCallableError のインスタンスを投げる。
  3. ((渡された引数の個数) - 1) を n として、二つ目以降の引数を順に T1, T2, …, Tn とする。
  4. T1, T2, …, Tn のどれもがテンソルオブジェクトでなければ、初期の Void.void を @this 値とし、 T1, T2, …, Tn を引数として F を関数として呼出し、その結果を返す。
  5. T1, T2, …, Tn のうちテンソルオブジェクトであるものについて、それらの 型が全て同じことを確認し、それらのテンソルオブジェクトのうちどれか一つの elements 内部メンバの値を e0 とする。 もし異なる型のテンソルオブジェクトが存在すれば、新しい DimensionError のインスタンスを投げる。
  6. i = 1, 2, …, n について、 Ti がテンソルオブジェクトならば、その elements 内部メンバの値を ei とする。
  7. e0 の全ての有効なインデックス i1, i2, …, im について、ちょうど一度づつ以下の処理を行う:
    1. 1 以上 n 以下の全ての整数 k について、 Tk がテンソルオブジェクトならば ak = ek[i1][i2]...[im] とし、テンソルオブジェクトでなければ ak = Tk とする。
    2. 初期の Void.void を @this 値とし、a1, a2, …, an を引数として F を関数として呼出し、その結果に対して get-reference-value を行い、その結果を ri1,i2,…,im とする。そしてそれが正常終了でなければ、直ちにそれを返す。
  8. e0 と同じ型で、以下に定める要素を含むテンソル原始リストを e とする: e の全ての有効なインデックス i1, i2, …, im について e[i1][i2]...[im] は ri1,i2,…,im の値である。
  9. [[eelements 内部メンバの値とする読み取り専用でない新しいテンソルオブジェクト]] を返す。

Tensor の内部メンバ

$prototype
Type.prototype

Tensor の関数としての呼出し

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

  1. 呼出しで渡された引数がなければ、新しい NumberOfArgumentsError のインスタンスを投げる。
  2. 渡された引数を A1, A2, …, Ar とする。
  3. A1, A2, …, Ar が全て Real オブジェクトならば、以下の動作を行う:
    1. A1, A2, …, Ar の各オブジェクトに対して real-to-int を行い、その結果を それぞれ i1, i2, …, ir とする。ただし、いづれかの real-to-int の結果が null であるか負数ならば、直ちに新しい OufOfRangeError のインスタンスを投げる。
    2. i1, i2, …, ir を内容とする原始リストを d とし、d を型とするテンソル原始リストを e とする。 e に含まれるオブジェクトは全て初期の Void.void とする。
    3. [[ddims 内部メンバの値とし、eelements 内部メンバの値とする、読み取り専用でない新しい テンソルオブジェクト]] を返す。
  4. これ以降の動作は、未定義である。

テンソルオブジェクトのプロパティ

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

count
これは読み取り専用プロパティであり、その値は、Integer オブジェクトである。この値は、 このテンソルオブジェクトに含まれている要素の個数、すなわち dims 内部メンバの値に含まれている全ての整数の積を表す。
dims
これは読み取り専用プロパティであり、その値は以下のような要素を含むリストオブジェクトである: リストオブジェクトの要素は全て Integer オブジェクトであり、その個数はこのテンソルオブジェクトの型に含まれる整数の個数に 等しい。リストオブジェクトの i 個目の要素となっている Integer オブジェクトは、このテンソルオブジェクトの型に含まれる i 個目の整数を表す。
同じテンソルオブジェクトについて複数回このプロパティを取得する場合、 二回目以降の取得では以前の取得結果の値となったものと同じリストオブジェクトを 再び値としても良い。この場合、リストオブジェクトは 最初に取得される時点から読み取り専用でなければならない。
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 を代入することで、 テンソルを読み取り専用にすることができる。一度読み取り専用になったテンソルを 元の状態に戻すことは出来ない。
map メソッド
1-ary メソッド。関数として呼出されると、以下の処理を行う:
  1. 呼出しで渡された引数が一つもなければ、新しい NumberOfArgumentsError のインスタンスを投げる。
  2. 呼出しで渡された一つ目の引数を F とし、@this 値を T1 とする。
  3. 渡された引数の個数を n として、二つ目以降の引数を順に T2, T3, …, Tn とする。
  4. 初期の Void.void を @this 値とし、F, T1, T2, …, Tn を引数として、 Tensor.map を関数として呼出し、その結果を返す。
contractWith メソッド
3-ary メソッド。関数として呼出されると、以下の処理を行う:
  1. 呼出しで渡された引数が一つもなければ、新しい NumberOfArgumentsError のインスタンスを投げる。
  2. 呼出しで渡された @this 値を T とし、渡された一つ目の引数を T′ とする。T または T′ がテンソルオブジェクトでなければ、新しい TypeError のインスタンスを投げる。
  3. 渡された二つ目の引数を F とする。引数の個数が二つに満たなければ 代わりに関数生成式 & #1 #2 を評価して得られるような 関数オブジェクトを F とする。F が関数として呼出し可能でなければ、新しい NotCallableError のインスタンスを投げる。
  4. 渡された三つ目の引数を G とする。引数の個数が三つに満たなければ 代わりに Math.sumG とする。G が関数として呼出し可能でなければ、新しい NotCallableError のインスタンスを投げる。
  5. T, T′ の elements 内部メンバの値をそれぞれ e, e′ とする。
  6. e の型に含まれる整数を d1, d2, …, dre′ の型に含まれる整数を d1, d2, …, dr とする。ただし、r, r′ はそれぞれの階数である。
  7. drd1 が異なっているか、またはその値が 0 ならば、新しい DimensionError のインスタンスを投げる。
  8. r = r′ = 1 ならば、後述の結果がスカラの場合に進む。
  9. d1, d2, …, dr−1, d2, d3, …, dr を内容とする原始リストを型とする r + r′ − 2 階のテンソル原始リストを p とする。
  10. p の全ての有効なインデックス i1, i2, …, ir+r′−2 について、ちょうど一度づつ以下の処理を行う:
    1. 1 以上 dr 以下の全ての整数 k について、初期の Void.void を @this 値とし、 e[i1][i2]...[ir−1][k] と e′[k][ir][ir+1]...[ir+r′−2] の二つの引数で F を関数として呼出し、 その結果に対して get-reference-value を行い、その結果を sk とする。そしてそれが正常終了でなければ直ちにそれを返す。
    2. 初期の Void.void を @this 値とし、s1, s2, …, sdr のそれぞれの値を引数として G を関数として呼出し、その結果に対して get-reference-value を行い、その結果を ti1,i2,…,ir+r′−2 とする。そしてそれが正常終了でなければ、直ちにそれを返す。
  11. p と同じ型で、以下に定める要素を含むテンソル原始リストを q とする: q の全ての有効なインデックス i1, i2, …, ir+r′−2 について q[i1][i2]...[ir+r′−2] は ti1,i2,…,ir+r′−2 の値である。
  12. [[qelements 内部メンバの値とする読み取り専用でない新しいテンソルオブジェクト]] を返す。
結果がスカラの場合:
  1. 1 以上 dr 以下の全ての整数 k について、初期の Void.void を @this 値とし、 e[k] と e′[k] の二つの引数で F を関数として呼出し、 その結果に対して get-reference-value を行い、その結果を sk とする。そしてそれが正常終了でなければ直ちにそれを返す。
  2. 初期の Void.void を @this 値とし、s1, s2, …, sdr のそれぞれの値を引数として G を関数として呼出し、その結果を返す。
この関数は引数に相手のテンソルと乗算関数と加算関数を 受け取り、このテンソルの最後の次元と相手のテンソルの最初の次元とを縮約する。 (ドット積の一般化)
$plus メソッド
0-ary メソッド。引数無しで関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトを引数として このテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & +#
$add メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 + #2
$increment メソッド
0-ary メソッド。引数無しで関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトを引数として このテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #.$increment[]
$minus メソッド
0-ary メソッド。引数無しで関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトを引数として このテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & -#
$subtract メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 - #2
$decrement メソッド
0-ary メソッド。引数無しで関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトを引数として このテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #.$decrement[]
$multiply メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 * #2
$reciprocal メソッド
0-ary メソッド。引数無しで関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトを引数として このテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & /#
$divide メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 / #2
$quotient メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 \ #2
$mod メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 % #2
$power メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 ^ #2
$less メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 < #2
$greater メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 > #2
$lessEqual メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 <= #2
$greaterEqual メソッド
1-ary メソッド。一つの引数 x で関数として呼出されると、 次の関数生成式を評価して得られるような関数オブジェクトと x を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を返す: & #1 >= #2
$equal メソッド
1-ary メソッド。一つのオブジェクト X を引数として関数として 呼出されると、以下の動作を行う:
  1. X がテンソルオブジェクトであり、かつこのテンソルオブジェクトと X の型が異なっていれば、[[初期の Boolean.false]] を返す。
  2. 関数生成式 & #1 == #2 を評価して得られるような 関数オブジェクトと X を引数としてこのテンソルオブジェクトの map メソッドを呼出し、その結果を r とする。r が正常終了でなければ、直ちにそれを返す。
  3. r の値はテンソルオブジェクトであるはずである。 r の値に含まれる全ての要素に対して to-boolean を行い、全ての結果が true ならば [[初期の Boolean.true]] を、さもなくば [[初期の Boolean.false]] を返す。
$juxtapose メソッド
1-ary メソッド。
テンソルオブジェクト一つを引数として関数として呼出されると、 同じ引数でこのテンソルオブジェクトの contractWith メソッドを呼出し、その結果を返す。
テンソルオブジェクトでないオブジェクト一つを引数として 関数として呼出されると、このテンソルオブジェクトの map メソッドを二つの引数で呼出し、その結果を返す。 一つ目の引数は、関数生成式 & #1 #2 を評価して得られるような関数オブジェクトとする。 二つ目の引数は、この呼出しで渡された引数とする。
toList メソッド
0-ary メソッド。関数として呼出されると、[[elements 内部メンバの値がこのテンソルオブジェクトの elements 内部メンバの平坦化リストであるような新しいリストオブジェクト]] を返す。ただし、n 階のテンソル原始リスト e の平坦化リストとは、以下のような 1 階のテンソル原始リスト f である:
copy メソッド
0-ary メソッド。関数として呼出されると、[[以下の条件を全て満たす 新しいテンソルオブジェクト]] を返す:
getEnum メソッド
関数として呼びだされると、[[新しい開始列挙オブジェクト]] を返す。この列挙オブジェクトによる列挙操作は、 このテンソルオブジェクトの全ての要素を一度づつ列挙する。ただし、 列挙操作が完了する (列挙オブジェクトの toNext メソッドnull を返す) までに このテンソルオブジェクトの elements 内部メンバが変更された場合は、 それ以降の列挙操作の挙動は規定しない。
要素が列挙される順序は、インデックスの若い順とする。インデックス i1, i2, …, in がインデックス j1, j2, …, jn よりも若いとは、 ikjk となる最小の自然数 k において ik < jk であることである。
toNext メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @{ @this.getEnum[].toNext[] }

テンソルオブジェクトの内部メンバ

$prototype
Tensor.prototype、または Tensor.prototype を準プロトタイプとするオブジェクト。
dims
一つ以上の 0 以上の整数を内容とする原始リスト。この原始リストはテンソルオブジェクトの型を示す。
この内部メンバは不変である。
elements
dims 内部メンバの値を型とするテンソル原始リスト。 このテンソル原始リストはテンソルオブジェクトの要素を保持する。
isReadOnly
この内部メンバが存在するならばテンソルオブジェクトは読み取り専用である。

テンソルオブジェクトの関数としての呼出し

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

  1. 関数として呼出されたこの Tensor のインスタンスを T とする。
  2. Telements 内部メンバの値の階数を r とする。この呼出しで渡された引数の個数が r でなければ、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. T の型に含まれる整数を d1, d2, …, dr とする。
  4. 渡された引数を A1, A2, …, Ar とする。
  5. A1, A2, …, Ar が全て Real オブジェクトならば、以下の動作を行う:
    1. A1, A2, …, Ar の各オブジェクトに対して real-to-int を行い、その結果を それぞれ i1, i2, …, ir とする。ただし、real-to-int の結果が null である場合は、代わりに −1 を結果とする。
    2. [[Ti1, i2, …, ir に対応するテンソル要素参照]] を返す。
  6. A1, A2, …, Ar が全て Real オブジェクトまたは Interval のインスタンスならば、以下の動作を行う:
    1. 全ての k = 1, 2, …, r について、以下の動作を行う:
      • AkReal オブジェクトならば、それに対して real-to-int を行い、その結果を ik とする。さらに ik = jk とする。ただし、real-to-int の結果が null である場合は、代わりに ik = 1, jk = 0 とする。
      • AkInterval のインスタンスならば、それに対して ints-in-interval を行う。 その結果が正常終了でなければ、直ちにそれを返す。あるいはその結果が [[null]] ならば、これ以降の動作は、未定義である。さもなくば、その結果の値は 整数の集合であるはずであるので、それを I とする。 I に含まれる最小の正の整数を ik, 最大の dk 以下の正の整数を jk とする。ただし I に正の整数が含まれていない場合は、ik = 1, jk = 0 とする。
    2. [[Ti1, i2, …, irj1, j2, …, jr に対応するテンソル範囲参照]] を返す。
  7. これ以降の動作は、未定義である。

テンソル要素参照

テンソル要素参照参照の一種である。全てのテンソル要素参照は、それぞれ対応する テンソルオブジェクト Tr 個の整数 i1, i2, …, ir を持つ。ただし rTelements 内部メンバの値の階数である。

テンソル要素参照に対する動作を以下に定める:

check-reference-value
  1. T の現在の elements 内部メンバの値を e とする。
  2. i1, i2, …, ire の有効なインデックスならば [[初期の Boolean.true]] を、 さもなくば [[初期の Boolean.false]] を返す。
get-reference-value
  1. T の現在の elements 内部メンバの値を e とする。
  2. i1, i2, …, ire の有効なインデックスならば [[ e[i1][i2]...[ir] ]] を返す。さもなくば新しい OutOfRangeError のインスタンスを投げる。
set-reference-value
  1. set-reference-value の対象となるオブジェクトを O とする。
  2. T の現在の elements 内部メンバの値を e とする。
  3. T の現在の isReadOnly プロパティの値が初期の Boolean.true ならば、新しい ReadOnlyError のインスタンスを投げる。
  4. i1, i2, …, ire の有効なインデックスでなければ新しい OutOfRangeError のインスタンスを投げる。
  5. e と同じ型のテンソル原始リストを e′ とする。e′ は、e′[i1][i2]...[ir] = O であることを除いて e と同じ要素を持つ。
  6. Telements 内部メンバの値を e′ に変更する。
  7. [[O]] を返す。
delete-reference-value
  1. 新しい ReadOnlyError のインスタンスを投げる。

テンソル範囲参照

テンソル範囲参照参照の一種である。全てのテンソル範囲参照は、それぞれ対応する テンソルオブジェクト Tr 個の整数 i1, i2, …, ir および j1, j2, …, jr を持つ。ただし rTelements 内部メンバの値の階数である。

テンソル範囲参照に対する動作を以下に定める:

check-reference-value
  1. [[初期の Boolean.true]] を返す。
get-reference-value
  1. T の現在の elements 内部メンバの値を e とする。
  2. k = 1, 2, …, r について、dk = jkik + 1 とする。
  3. d1, d2, …, dr を型とする r 階のテンソル原始リストを e′ とする。e′ の要素は以下のように定める: e′ の有効な全てのインデックス k1, k2, …, kr について、e′[k1][k2]…[kr] = e[i1 + k1 − 1][i2 + k2 − 1]…[ir + kr − 1]
  4. [[e′ を elements 内部メンバの値とする、 読み取り専用でない新しいテンソルオブジェクト]] を返す。
set-reference-value
  1. set-reference-value の対象となるオブジェクトを O とする。
  2. T の現在の elements 内部メンバの値を e とする。
  3. T の現在の isReadOnly プロパティの値が初期の Boolean.true ならば、新しい ReadOnlyError のインスタンスを投げる。
  4. k = 1, 2, …, r について、dk = jkik + 1 とする。
  5. O がテンソルオブジェクトならば、以下の動作を行う:
    1. Oelements 内部メンバの値を e″ とする。
    2. e″ の型が d1, d2, …, dr でなければ、新しい DimensionError のインスタンスを投げる。
    3. e と同じ型の、以下に定める要素を持つテンソル原始リストを e′ とする: e′ の有効な全てのインデックス k1, k2, …, kr について、
      全ての l = 1, 2, …, r について、ilkljl ならば
      e′[k1][k2]…[kr] = e″[k1i1 + 1][k2i2 + 1]…[krir + 1]
      さもなくば
      e′[k1][k2]…[kr] = e[k1][k2]…[kr]
    O がテンソルオブジェクトでなければ、以下の動作を行う:
    1. e と同じ型の、以下に定める要素を持つテンソル原始リストを e′ とする: e′ の有効な全てのインデックス k1, k2, …, kr について、
      全ての l = 1, 2, …, r について、ilkljl ならば
      e′[k1][k2]…[kr] = O
      さもなくば
      e′[k1][k2]…[kr] = e[k1][k2]…[kr]
  6. Telements 内部メンバの値を、e′ に変更する。
  7. [[O]] を返す。
delete-reference-value
  1. 新しい ReadOnlyError のインスタンスを投げる。
© 2006-2007 Magicant