4.1 配列操作関数

To Be Revised

生成

  • https://mlochbaum.github.io/BQN/doc/map.html#table

同じ形状の二つのリストからCouple '≍'で配列を構成する

   x ← 1‿2‿3≍3‿4‿5
┌─
╵ 1 2 3
  3 4 5
        ┘
   x ≍ x
┌─
╎ 1 2 3
  3 4 5

  1 2 3
  3 4 5
        ┘

ちゃんと配列になっているかどうかを確かめるにはShape '≢'の返値で軸が2つあることを見ればよい。 ちなみにリストのリストは深さが2で次元が2なのではない。 だからstrandをネストさせてもtableにはならない。

Table '⌜'を使って二つのリストの外積𝔽⌜として生成する

  • https://mlochbaum.github.io/BQN/doc/map.html#table

要素の追加

  • https://mlochbaum.github.io/BQN/doc/join.html

配列に要素を追加する、すなわちHaskellでのa -> [a] -> [a]がやりたいならJoin To '∾'を使う。 これは要素が左引数なら先頭に追加し、右引数なら最後に追加する。

indexing

  • https://mlochbaum.github.io/BQN/doc/indices.html

Pick '⊑'やSelect '⊏'を使う。二つ組を処理したいなら

    {𝕗(0⊏𝕨) ⋄ 𝕘(1⊏𝕨)}

filtering

  • https://mlochbaum.github.io/BQN/doc/replicate.html

Indices '/'はそれぞれの要素の個数を指定するので要素の有無指定以上のことができる。

    0‿1‿1‿0‿3/"abcde"
"bceee"

folding

  • https://mlochbaum.github.io/BQN/doc/fold.html#insert

Insert '˝'はリストにしか使えないFold '´'を一般化したもの。

これで次元が一つ落ちるので引数がリストなら結果はスカラーになる。 しかし2次元なものを潰したいならさらにもう1回foldすることが必要になる。

また2次元配列が対象だとするとこれは各列を行方向に渡って潰したものになる。 もし各行で列方向を潰したいなら、二つ目の軸を指定することが必要になるので、

    𝔽¨˘

となる。

配列に対するマッピング

  • https://mlochbaum.github.io/BQN/doc/map.html#mapping-modifiers

  • 要素に対するマッピングにはリストと同じく𝔽¨が使える。

  • TODO: 要素に対するマッピングにはTable '⌜'が使える。

  • セルに対するマッピングにはCells '˘'が使える。

配列の更新

配列はimmutableなので変更できない。Under '⌾'を使ったopticsのようなことはできる。

The Under 2-modifier expresses the idea of modifying part of an array, or applying a function in a different domain, such as working in logarithmic space.

  • https://mlochbaum.github.io/BQN/doc/under.html

Deshape/Reshape '⥊'による変形

𝕨意味
∘要素数は正確に一致することが必要
⌊多い分は切り捨て
⌽不足分は循環追加
↑不足分はfill(arrayなら最初の要素?)