本文へ移動
Hikari リファレンス

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 を返す。

>>> array.build(3, 0) { a | a.set(0, 9) }
[9, 0, 0]

collect

collect { h | … }
collect: { EffectConduit({ Borrowed(Array(e)) | Any }) | List(e) }

長さ未定の Array を作りブロックを実行、終了時に frozen した immutable List を返す。要素は h.push(v) で足す。

>>> array.collect { a | a.push(1).push(2) }
[1, 2]

empty

empty()
empty: { Array(e) }

長さ 0 の Array を作る。要素は push で足す。要素型は期待型から取る (無ければ Any)。

>>> array.empty().push(1).push(2).frozen()
[1, 2]

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 に確定し封印する。

>>> a := array.from([1, 2, 3])
>>> a.frozen!
[1, 2, 3]

get

a.get(i)
get: { Int | e }

位置 i の要素 (範囲外は Error)。

>>> array.from([10, 20]).get(1)
20

length

a.length!
length: { Int }

要素数。

>>> array.from([1, 2, 3]).length!
3

push

a.push(v)
push: { e | Effect(Borrowed(Array(e)), Mut) }

末尾に v を足して長さを 1 増やし self を返す (連鎖可)。

効果ハンドラーの操作である。handle の操作スロットに push と書いて横取りできる(language-spec.md §17.9)。

>>> a := array.array(0, 0)
>>> a.push(7)
Array[7]

set

a.set(i, v)
set: { Int, e | Effect(Borrowed(Array(e)), Mut) }

位置 i を v に上書きし self を返す (連鎖可)。

効果ハンドラーの操作である。handle の操作スロットに set と書いて横取りできる(language-spec.md §17.9)。

>>> a := array.array(2, 0)
>>> a.set(0, 99)
Array[99, 0]

swap

a.swap(i, j)
swap: { Int, Int | Effect(Borrowed(Array(e)), Mut) }

位置 i と j の要素を交換し self を返す。

効果ハンドラーの操作である。handle の操作スロットに swap と書いて横取りできる(language-spec.md §17.9)。

>>> a := array.from([1, 2, 3])
>>> a.swap(0, 2)
Array[3, 2, 1]

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)。

>>> a := array.from([1, 2, 3])
>>> a.update(1) {x | x + 100}
Array[1, 102, 3]