我认为函数应该停止一旦x达到8囷8打印出来。
我认为函数应该停止一旦x达到8囷8打印出来。
您的代码不会做你认为它
每当您拨打p
它会执行该方法中的代码,在您的情况下该代码将使用一些参数调用new_if
。但是您立即评估这些参数,这意味着在输入new_if
之前您的代码正在执行print(x)
和p(2*x)
。这导致p
再次被调用重复该过程。
在你如何评估代码的过程中似乎存在一些普遍的混淆:特别是你认为谓词和子句真的不是。在之前评估参数调用new_if
。因此您可以通过p
进行无限递归调用,几乎在您拨打p
后立即评估p(2*x)
您可以通过传递函数来实现您想要的功能,然后您可以在您的new_if
函数中进行评估这可以用lambda函数来完成,像这样: