Gần đây tôi đã xem đoạn mã này trong Java. Nó liên quan đến chức năng và in số mã số và nó hoạt động.Phần này của cuộc gọi lambda đệ quy trong Java làm việc
public class AppLambdaSubstitution {
public static Function<Integer, Integer> Y(Function<Function<Integer, Integer>, Function<Integer, Integer>> f) {
return x -> f.apply(Y(f)).apply(x);
}
public static void main(String[] args) {
Function<Integer, Integer> fib = Y(
func -> x -> {
if (x < 2)
return x;
else
return func.apply(x - 1) + func.apply(x - 2);
});
IntStream.range(1,11).
mapToObj(Integer::valueOf).
map(fib).forEach(System.out::println);
}
}
Phần tôi nhầm lẫn là return x -> f.apply(Y(f)).apply(x);
. Không phải là Y(f)
một cuộc gọi đệ quy đến phương thức Y
? Chúng tôi tiếp tục gọi nó với hàm f
làm tham số. Đối với tôi, không có trường hợp cơ bản nào cho cuộc gọi đệ quy này để trở về. Tại sao không có tràn kết quả từ một cuộc gọi đệ quy vô tận?
Lệnh 'Y (f)' gọi là bên trong một lambda và lambda đó chỉ được thực thi nếu 'f' chọn gọi nó. – 4castle
https://en.wikipedia.org/wiki/Fixed-point_combinator – pvg