gpt4 book ai didi

prolog - 如何使用 prolog 进行推断?

转载 作者:行者123 更新时间:2023-12-04 10:15:44 24 4
gpt4 key购买 nike

pl 文件的内容。

isabove(g,b1).
isabove(b1,w1).
isabove(w2,b2).
isabove(b2,b3).
isabove(X,Z):-isabove(X,Y),isabove(Y,Z).
color(g,gray).`enter code here`
color(b1,blue).
color(b2,blue).
color(b3,blue).
color(w1,white).
color(w2,white).

然后当执行以下命令时
?- 以上(X,Y)。
results
X = g,
Y = b1 ;
X = b1,
Y = w1 ;
X = w2,
Y = b2 ;
X = b2,
Y = b3 ;
X = g,
Y = w1 ;

ERROR: Stack limit (2.0Gb) exceeded
ERROR: Stack sizes: local: 2.0Gb, global: 2Kb, trail: 0Kb
ERROR: Stack depth: 24,399,533, last-call: 0%, Choice points: 5
ERROR: Probable infinite recursion (cycle):
ERROR: [24,399,533] user:isabove(w1, _814)
ERROR: [24,399,532] user:isabove(w1, _834)
?- =

'isabove(X,Z):-isabove(X,Y),isabove(Y,Z).

这部分似乎导致了问题,但我想知道为什么会出现问题以及如何修复它以获得您想要的答案。答案我会等。谢谢你。

最佳答案

定义 isabove作为:

isabove(X,Z) :- isabove(X,Y), isabove(Y,Z).

一旦枚举案例,将导致无限循环,因为 Prolog 将继续进行递归调用。

人们通常所做的是为知识制定一个谓词,并确定传递闭包。的确:
above(g,b1).
above(b1,w1).
above(w2,b2).
above(b2,b3).

isabove(X, Y) :-
above(X, Y).
isabove(X,Z) :-
above(X,Y),
isabove(Y,Z).

在这里我们保证进步,因为 above/2将统一 XY ,最终我们到达了顶部元素,因此它将无法找到更上面的元素。

关于prolog - 如何使用 prolog 进行推断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61068363/

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