次のコードを検討してください。このコードは、ほとんどの場合関数が直接呼び出されるチキンスキームスタイルの再帰をほぼ実装していますが、より複雑なトランポリン手順が存在する場合もあります。ただし、コードは正しく機能しません。私が本当に必要としているのは、スタックオーバーフローの危険性があるかどうかを示すブール値を返すメソッド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();
}
}