Prolog实现while循环时X>Y为false终止,如何不修改循环和write修复?
问题根因
你当前的代码仅定义了1条loop/2谓词子句,当X > Y判断不成立时没有可匹配的子句,Prolog会直接返回false终止整个调用链,递归栈中所有待执行的write语句都会被直接丢弃。
解决方法
不需要修改你已有的循环逻辑和write语句,仅需在原有子句后面新增一条兜底终止子句即可:
% 原有代码完全保留不用修改 loop(X, Y):- X > Y, Y1 is Y +1, loop(X,Y1), write(Y), tab(1). % 新增兜底终止子句 loop(X, Y).
效果与原理
新增的空子句会在X > Y不成立时被匹配,直接返回true不会触发调用失败,递归栈会正常回溯执行之前堆叠的write语句。例如调用loop(3, 0)时,会正常输出2 1 0,符合你递归结束后回溯打印的逻辑。
内容的提问来源于stack exchange,提问作者Emanuel Salvadinho
相关产品推荐
相关产品推荐

