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⟩を持つ配列は作れるか?