gpt4 book ai didi

Prolog - 找到第一个解决方案并停止搜索

转载 作者:行者123 更新时间:2023-12-03 21:31:37 28 4
gpt4 key购买 nike

我正在 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), !.

关于Prolog - 找到第一个解决方案并停止搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291195/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com