gpt4 book ai didi

返回 prolog-false 而不是数字

转载 作者:行者123 更新时间:2023-12-04 20:03:17 25 4
gpt4 key购买 nike

我正在尝试编写一个返回两个数字之间的最小值和最大值的谓词。minmax 谓词工作正常,但是当我尝试使用 min_max 函数时,例如 min_max(2,5,X, Y),我弄错了。谁能帮忙?

min(X,Y,X) :- X=<Y.
min(X,Y,Y) :- Y<X.

max(X,Y,Y) :- X=<Y.
max(X,Y,X) :- Y<X.

min_max(X,Y,MIN,MAX) :-
min(X,Y,MIN),
max(X,Y,MAX).

最佳答案

您的min/2max/2不确定的,因此需要寻找替代方案。当你评估

min_max(2,5,X,Y).

你看

X = 2,
Y = 5

然后它会暂停,等待您的输入。如果您随后按 .,它将成功。但是,如果您按下 ;,它会搜索备选方案,但没有找到,就会失败。

您需要将min/2max/2 修改为determinate,如下所示:

min(X,Y,Z) :- ( X < Y -> Z = X ; Z = Y ) .

max(X,Y,Z) :- ( X > Y -> Z = X ; Z = Y ) .

[-> 运算符(蕴含)有效地充当“软切”,消除了备选方案。]

一旦你这样做了,它就会像你预期的那样工作,而不会因为你的输入而暂停(因为你已经消除了选择点):

13 ?- min_max(2,5,X,Y).
X = 2,
Y = 5.

14 ?-

如果您将 prolog 程序想象成一棵树,将选择点作为分支(将解决方案作为叶节点),这可能会有所帮助。 prolog 引擎遍历那棵树,试图找到解决方案。

在您的原始程序中,您的 min_max/4 有 4 个可能的 解决方案(2 个用于min/2,2 个用于max/2),即使只有一个“功能性”解决方案。在回溯时,prolog 引擎尝试寻找替代解决方案,但没有找到,失败。

通过重写 min/2max/2 来消除选择点,我们在下降时有效地修剪了树,留下了一个解决方案。

关于返回 prolog-false 而不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30719116/

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