3.2 単位配列 Unit array
軸を持たない配列を単位配列という。軸は持たない(rank=0)がデータを一つ格納する事ができる。
rank多相を避けるためにはEnclose '<
'を使って単位配列(rank=0なので一種のatomのように振る舞う)にしてしまうのが簡単である。
単位配列は空の配列とは違うので注意。
≢⟨⟩ # 空リストは軸を持つ。要素数が0なだけである
⟨ 0 ⟩
=⟨⟩ # 従ってrankは1である
1
<"abc" # 任意のデータを Enclose '<'に渡すと単位配列化したものを返す
┌·
· "abc"
┘
≢<"ee" # 単位配列は軸を持たず、、従ってrank=0となる
⟨⟩
≢<⟨⟩ # 配列であっても単位配列化できる
⟨⟩
3‿3⥊1 # 1というatomを⟨3 3⟩に並べるのは簡単
┌─
╵ 1 1 1
1 1 1
1 1 1
┘
3‿3⥊"abc" # 文字列という配列を⟨3 3⟩に並べたいのだが
┌─
╵"abc
abc
abc"
┘
3‿3⥊<"abc" # 単位配列化してしまえば9回繰り返すしかなくなる
┌─
╵ "abc" "abc" "abc"
"abc" "abc" "abc"
"abc" "abc" "abc"
┘
depth≥2のデータに対してはMerge '>
'で単位配列からデータを取り出す事ができる。
x ← <"abc"
┌·
· "abc"
┘
>x # Merge '>' を使ってデータを取り出す
"abc"
ただし(グリフの形状的についそう思ってしまうが)、これはEncloseの逆関数ではない。Encloseの逆関数はEncloseの逆関数である。
<3
┌·
· 3
┘
><x
┌·
· 3
┘
<⁼<x # Undo '⁼' は逆関数を作り出す1-modifier なので4.2にて説明
3
設問
shape=⟨0 0 0⟩を持つ配列は作れるか?