2.3 基本関数群

関数は4章で、modifiersは5章で説明するつもりなのだが、それまでの説明に関数やmodifiersを全く使わないわけにはいかないので、それらの章までに出現するものを「基本」と称してここで紹介することにする。

なお、この節では𝔽/1は関数𝔽がmonadic functionであることを、𝔽/2は関数𝔽がdyadic functionであることを表す。 そしてわかりやすさのためトークン間にはより空白を置いて記述する。

また、はリテラル構成子であり、関数ではなく、関数適用よりも高い優先度を持つので念のため。

関数

算術計算+-×÷⋆√

乗算は×、除算は÷、冪乗は、moduloは|で表される。 これらの関数はそれぞれmonadic applicationでは違う意味を持つので注意。

floor関数は⌊/1、ceiling関数は⌈/1である。 整数除算はグリフとしては存在しないので除算÷/2の結果を⌊/1で整数化することになる。

Join/1, Join To/2 ''

Join Toは''のdyadic applicationで𝕨𝕩とを結合する。𝕨が長さ\(l\)の配列、𝕩が長さ\(m\)の配列とすると𝕨∾𝕩は\(l+m\)の長さの配列になる。

    1‿2∾5‿6‿7
⟨ 1 2 5 6 7 ⟩
    "abc" ∾ "xyz"
"abcxyz"
    "abc" ∾ 1‿2‿3
⟨ 'a' 'b' 'c' 1 2 3 ⟩

Joinは''のmonadic applicationである。𝕩はリストのリストであり、それらを結合する。

   ∾ ⟨⟨1⟩,⟨2,3⟩,⟨0,4⟩⟩
⟨ 1 2 3 0 4 ⟩

Deshape/1, Reshape/2 ''

Pick ''

    1 ⊑ 3‿2‿1
2
    ¯1 ⊑ 3‿2‿1
1
    0 ⊑ 3‿2‿1
3
    ⊑ 3‿2‿1
3

Pair/2 ''

Range/1 ''

    ↕ 4
⟨ 0 1 2 3 ⟩
    ↕ 0
⟨⟩
    ↕ 2‿3    # 多次元配列も指定できる
┌─
╵ ⟨ 0 0 ⟩ ⟨ 0 1 ⟩ ⟨ 0 2 ⟩
  ⟨ 1 0 ⟩ ⟨ 1 1 ⟩ ⟨ 1 2 ⟩
                          ┘

Modifiers

modifierは

  • 1つの関数を引数に取り修正を加えた関数を返す1-modifier
  • 2つの関数を引数に取りそれらから構成された新たな関数を返す2-modifier からなる。高階関数である。

modifierの適用は関数適用よりも優先度が高い。

    ¯5 √○| ¯9
9
    ¯5 (⌈○|) ¯9    # 関数の合成後に適用
9
   # (¯5⌈) ○ (| ¯9)    # ではない。そもそも(¯5√)は正しい構文ではない
   # ¯5 (⌈○ (| ¯9))    # ではない。○の右引数が関数ではなくなっている

Each '¨'

関数型プログラミングでお馴染みのmap関数に相当する。

    {1+𝕩}¨ 3‿2‿1‿0    # リスト3‿2‿1‿0に対して{1+𝕩}という関数をmapする
⟨ 4 3 2 1 ⟩

Cells '˘'

Fold '´'

関数型プログラミングでお馴染みのfold関数に相当する。 適用順序などの詳細は5.2 1-modifiersにて。

   +´ 1‿2‿4‿10    # リスト1‿2‿4‿10に対して+という関数でfoldする
17

∾/1∾/2のfold版になる。

    ∾ ⟨⟨1⟩,⟨2,3⟩,⟨0,4⟩⟩
⟨ 1 2 3 0 4 ⟩
    ∾´ ⟨⟨1⟩,⟨2,3⟩,⟨0,4⟩⟩    # → ⟨1⟩∾⟨2,3⟩∾⟨0,4⟩
⟨ 1 2 3 0 4 ⟩