gpt4 book ai didi

prolog - 在序言中的真实答案后不停止

转载 作者:行者123 更新时间:2023-12-01 09:30:32 24 4
gpt4 key购买 nike

我写这个程序是为了给我这个结果:“X=约翰”“Y=简”

likes(john,mary).
likes(mary,jane).
likes(l,k).

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

但是如果运行这个程序使得这个结果:我认为程序进入循环!我想在真实答案后停下来!

1 ?- likes(X,Y).
X = john,
Y = mary ;
X = mary,
Y = jane ;
X = l,
Y = k ;
X = john,
Y = jane ;
ERROR: Out of local stack

我有错误!这个问题怎么解决?

通过调试:

[debug] 3 ?- likes(john,Y).
T Call: (6) likes(john, _G2162)
T Exit: (6) likes(john, mary)
Y = mary ;
T Redo: (6) likes(john, _G2162)
T Call: (7) likes(john, _G2267)
T Exit: (7) likes(john, mary)
T Call: (7) likes(mary, _G2162)
T Exit: (7) likes(mary, jane)
T Exit: (6) likes(john, jane)
Y = jane ;
T Redo: (7) likes(mary, _G2162)
T Call: (8) likes(mary, _G2267)
T Exit: (8) likes(mary, jane)
T Call: (8) likes(jane, _G2162)
T Call: (9) likes(jane, _G2267)
T Call: (10) likes(jane, _G2267)
T Call: (11) likes(jane, _G2267)
T Call: (12) likes(jane, _G2267)
T Call: (13) likes(jane, _G2267)
T Call: (14) likes(jane, _G2267)
T Call: (15) likes(jane, _G2267)

等等..为什么喜欢(简,_G2267)??????

最佳答案

如果你需要 "X=john""Y=jane"那么你必须重命名:

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

对于其他名称,例如:

likestransitive(X,Y) :- likes(X,Z), likes(Z,Y).

这样你就可以得到你需要的解决方案:

1 ?- transitivelikes(X,Y).    
X = john,
Y = jane;
false.

关于prolog - 在序言中的真实答案后不停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935053/

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