高階関数
リストのマップ
Array オブジェクトの map 属性を使って,リストに対してマッピングを行います.
[1; 2; 3].map(e -> e + 1) >- println; // [2; 3; 4]
上のコードは,下のように書くこともできます.
[1; 2; 3].map(? + 1) >- println; // [2; 3; 4]
関数としての演算子
1 . + 2 >- println; // 3
(. +) 1 2 >- println; // 3
Number:: + 1 2 >- println; // 3
(:: +) Number 1 2 >- println; // 3
+ = Number:: + ;
(+) 1 2 >- println; // 3
関数の合成
Root オブジェクトには関数合成の演算子 :. と .: が定義されています.(f :. g) x は g(f(x)),(f .: g) x は f(g(x)) のように評価されます.
neg = n ->
print "neg ";
0 - n
;
recip = n ->
print "recip ";
1 / n
;
(neg :. recip) 2 >- println; // neg recip -0.5
(neg .: recip) 2 >- println; // recip neg -0.5