メインコンテンツまでスキップ

高階関数

リストのマップ

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) xg(f(x))(f .: g) xf(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