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 ⟩