【发布时间】:2012-09-07 03:17:39
【问题描述】:
考虑以下代码。这段代码几乎实现了 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();
}
}
【问题讨论】:
-
所以真正的问题是检查堆栈上还剩下多少空间,而与递归、Chicken 或 Scheme 无关?
-
@JimGarrison 这个问题与鸡计划无关,但我觉得鸡计划的一些爱好者(当然还有从事尾递归代码工作的开发人员)可能会有在 C 中摆弄堆栈的经验,并且还可能尝试在 Java 中完成类似的事情。特别是,我想下面的对话可能发生在互联网上遥远的 ungoogleabe 角落。 Joe:为什么不将 Chicken Scheme 移植到 Java?鲍勃:那将是很多工作,而且没有意义。另外我检查了一下,没有办法在运行时检查堆栈大小。
标签: java stack stack-overflow chicken-scheme