clj-java-decompiler 对于函数 x 显示的基本上是这样
public static Object invokeStatic() {
while (true) {}
}
对于 y 则是这样
public static final Var const__0;
public static Object invokeStatic() {
return ((IFn)const__0.getRawRoot()).invoke();
}
这就是 recur
的用途,即优化尾递归。在某个时候, y
将耗尽栈空间,所以确实, recur
不能动态地重新绑定。