Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Usage:
- import static com.example.foo.Recursive.*;
- // ...
- final IntUnaryOperator fib = intUnaryOperator((i, self) -> i <= 1 ? i : self.applyAsInt(i - 1) + self.applyAsInt(i - 2));
- for (int n = 0; n <= 10; n++) System.out.format("F%d = %d", n, fib.applyAsInt(n));
- -------------------------------------------
- package com.example.foo;
- import java.util.function.*;
- public class Recursive<F> {
- private F f;
- public static <T, R> Function<T, R> function(final BiFunction<T, Function<T, R>, R> f) {
- final Recursive<Function<T, R>> r = new Recursive<>();
- return r.f = t -> f.apply(t, r.f);
- }
- public static IntUnaryOperator intUnaryOperator(final BiFunction<Integer, IntUnaryOperator, Integer> f) {
- final Recursive<IntUnaryOperator> r = new Recursive<>();
- return r.f = i -> f.apply(i, r.f);
- }
- public static <R> IntFunction<R> intFunction(final BiFunction<Integer, IntFunction<R>, R> f) {
- final Recursive<IntFunction<R>> r = new Recursive<>();
- return r.f = i -> f.apply(i, r.f);
- }
- // TODO : One static method for each interface in java.util.function
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement