package jp.dip.oyasirazu.study.curry;
public class StudyCurry {
/**
* こんな感じで、 Add を CurryAdd1 と CurryAdd2 の組み合わせに変換することをカリー化というのかな?
*/
public static void main(String[] args) {
Add add = new Add();
add.setArgs(100, 120);
System.out.println(add.eval());
// Integer -> (Integer -> Integer) に対応
ICurryFunction<Integer, ICurryFunction<Integer, Integer>> cAdd1 = new CurryAdd1();
cAdd1.setArg(100);
// (Integer -> Integer) に対応
ICurryFunction<Integer, Integer> cAdd2 = cAdd1.eval();
cAdd2.setArg(120);
System.out.println(cAdd2.eval());
// 実はこの cAdd2 は、 x == 100 として部分適用された Add 関数である。
cAdd2.setArg(190);
System.out.println(cAdd2.eval());
add.setArgs(100, 190);
System.out.println(add.eval());
// カリー化した関数は、「先頭の引数を部分適用した関数を返す関数」という事になるのか?
}
}