diff --git a/functional-programming-java/src/main/java/org/gym/fp/fpjava/demo/RecursionDemo.java b/functional-programming-java/src/main/java/org/gym/fp/fpjava/demo/RecursionDemo.java index f3f3462..465e788 100644 --- a/functional-programming-java/src/main/java/org/gym/fp/fpjava/demo/RecursionDemo.java +++ b/functional-programming-java/src/main/java/org/gym/fp/fpjava/demo/RecursionDemo.java @@ -2,10 +2,13 @@ package org.gym.fp.fpjava.demo; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.gym.fp.fpjava.type.Function; import org.gym.fp.fpjava.type.TailCall; import java.math.BigInteger; +import java.util.List; +import static org.gym.fp.fpjava.type.CollectionUtilities.*; import static org.gym.fp.fpjava.type.TailCall.ret; import static org.gym.fp.fpjava.type.TailCall.suspend; @@ -15,6 +18,9 @@ public class RecursionDemo { public static void run() { System.out.println(add(10, 1000)); System.out.print(fibonacci(10000)); + + Function add = y -> y + 1; + System.out.println(composeAll(map(range(0, 10_000), x -> add)).apply(0)); } public static int add(int x, int y) { @@ -42,4 +48,8 @@ public class RecursionDemo { } return (new Aux()).fib(BigInteger.ONE, BigInteger.ZERO, BigInteger.valueOf(number)).eval(); } + + public static Function composeAll(List> functions) { + return x -> foldRight(functions, x, f -> f::apply); + } }