prolog中的无限递归堆栈

时间:2013-06-04 15:34:40

标签: prolog

假设我有这段代码:

end_sol_cell(Row,9):-
   not(findall(Value,pos_cell(Row,9,Value),[_])).
end_sol_cell(Row,Col):-
   not(findall(Value,pos_cell(Row,Col,Value),[_])),
   New_Col is Col + 1,
   end_sol_cell(Row,New_Col).

w :- end_sol_cell(1,1), end_sol_cell(2,1).

当我打电话给“w”时,它进入无限循环怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我猜它不会循环切割:

end_sol_cell(Row,9):- !, /* <<< here */
   not(findall(Value,pos_cell(Row,9,Value),[_])).
end_sol_cell(Row,Col):-
   not(findall(Value,pos_cell(Row,Col,Value),[_])),
   New_Col is Col + 1,
   end_sol_cell(Row,New_Col).

但我不确定它是否正是你想要的。

再见