Рассмотрим следующий код. Этот код почти реализует рекурсию в стиле Chicken Scheme, где большую часть времени функции вызываются напрямую, но иногда есть более сложная процедура трамплина. Однако код работает не совсем корректно. Что мне действительно нужно, так это метод stackLimitsAlmostReached, который возвращает логическое значение, указывающее, существует ли опасность переполнения стека. Как я могу проверить ограничения стека и выполнить рекурсию в стиле Chicken Scheme в Java?
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();
}
}