我正在学习Prolog中的编程并且遇到规则问题,它必须搜索解决方案,一旦找到它,就必须“无所事事”.但它失败了,给了我不止一个解决方案.我试着这样做:
% here the solution is already found and there's nothing to be done.
findsolution:-
solution(X).
% trying to find the solution and use assert/1 if it was found.
findsolution:-
do_something,
do_whatever,
assert(solution(X)).
如果未找到解决方案,则第一个规则将失败,并且回溯将尝试规则的第二个实现.如果第二个找到解决方案,第一个规则必须成功,当我再次调用’findsolution / 0’时,不再需要回溯,只会查询第一个规则.我的目的是提高效率,防止不必要的查询,因为我知道只有一个解决方案,只是不知道是什么.我很感激.
附:我的程序的上下文在这里不一样,它是简化的.对不起,我的英语不好.
最佳答案 如果你想停止搜索,那么你必须做的是使用cut谓词避免(控制)回溯,检查
docs.
在这种情况下,你需要做的基本上是避免使用这个cut(!)谓词在你的第一个子句中回溯:
findsolution:- solution(X), !.