DulcetAirman icon

Recursive Functional Interfaces

DulcetAirman | PRO | 05/10/15 02:57:15 PM UTC | 0 ⭐ | 705 👁️ | Never ⏰ | []
Java |

1.1 KB

|

None

|

0 👍

/

0 👎

// 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
 
}

Comments