std:array リファレンス
import array := "std:array" で取得する可変 scratch 配列モジュール。in-place に書き換えられる Array を提供し、frozen で immutable な List に確定する。
Array
AtMostOnce(Array(e))
可変長の配列を組み立てる作業用ハンドル。AtMostOnce の多重度型なので、同じ
ハンドルへの 2 本目の経路は作れない (copy も別フローへの捕獲も静的に禁じる)。
frozen が Consuming メソッドで、内部 buffer を不変の List に確定して封印する。
使い残しは咎めない — 組み立てを途中でやめてよい。
>>> import arr := "std:array" >>> a := arr.array(0, 3) >>> a.push(1) >>> xs := a.frozen!
array
array(n, init)
array: { Int, e | Array(e) }
長さ n・全要素 init の可変 scratch 配列 Array を作る。
>>> array.array(3, 0) Array[0, 0, 0]
build
build(n, init) { h | … }
build: { Int, e, EffectConduit({ Borrowed(Array(e)) | Any }) | List(e) }
Array を作りブロックを実行、終了時に frozen した immutable List を返す。
collect
collect { h | … }
collect: { EffectConduit({ Borrowed(Array(e)) | Any }) | List(e) }
長さ未定の Array を作りブロックを実行、終了時に frozen した immutable List を返す。要素は h.push(v) で足す。
empty
empty()
empty: { Array(e) }
長さ 0 の Array を作る。要素は push で足す。要素型は期待型から取る (無ければ Any)。
from
from(list)
from: { List(e) | Array(e) }
既存 List の内容をコピーした Array を作る。
>>> array.from([1, 2, 3]) Array[1, 2, 3]
Array メソッド
frozen
a.frozen! frozen: Consuming({ List(e) })
内部 buffer を immutable List に確定し封印する。
get
a.get(i) get: { Int | e }
位置 i の要素 (範囲外は Error)。
length
a.length! length: { Int }
要素数。
push
a.push(v) push: { e | Effect(Borrowed(Array(e)), Mut) }
末尾に v を足して長さを 1 増やし self を返す (連鎖可)。
効果ハンドラーの操作である。handle の操作スロットに push と書いて横取りできる(language-spec.md §17.9)。
set
a.set(i, v) set: { Int, e | Effect(Borrowed(Array(e)), Mut) }
位置 i を v に上書きし self を返す (連鎖可)。
効果ハンドラーの操作である。handle の操作スロットに set と書いて横取りできる(language-spec.md §17.9)。
swap
a.swap(i, j) swap: { Int, Int | Effect(Borrowed(Array(e)), Mut) }
位置 i と j の要素を交換し self を返す。
効果ハンドラーの操作である。handle の操作スロットに swap と書いて横取りできる(language-spec.md §17.9)。
update
a.update(i) { x | x' }
update: { Int, EffectConduit({ e | e }) | Effect(Borrowed(Array(e)), Mut) }
位置 i を read-modify-write し self を返す。
効果ハンドラーの操作である。handle の操作スロットに update と書いて横取りできる(language-spec.md §17.9)。