考虑以下代码。这段代码几乎实现了 Chicken Scheme 风格的递归,其中大部分时间函数是直接调用的,但偶尔会有更复杂的蹦床过程。但是,代码不能完全正常工作。我真正想要的是一个方法 stackLimitsAlmostReached,它返回一个布尔值,指示是否存在堆栈溢出的危险。如何检查堆栈限制,并在 Java 中完成 Chicken Scheme 风格的递归?
import java.util.Scanner;
public class Main {
public static abstract class Thunk {
public abstract Thunk x();
public final void run() {
Thunk ip = this;
while (ip != null)
ip = ip.x();
}
}
public static void main(String[] unused) {
final Scanner scanner = new Scanner(System.in);
new Thunk() {
public Thunk x() {
System.out.println("Hello World!");
try {
return this.x();
} catch (StackOverflowError t) {
System.out.println("GC!");
scanner.nextLine();
return this;
}
}
}.run();
}
}