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 ⟩