gpt4 book ai didi

Prolog查询练习

转载 作者:行者123 更新时间:2023-12-02 01:47:20 42 4
gpt4 key购买 nike

这是我给定的子句

beats(rock, scissors).
beats(scissors, paper).
beats(paper, rock).

better(battleaxe, scissors).
better(lightsabre, battleaxe).
better(boulder, rock).
better(adamantium, boulder).
better(palisade, paper).
better(nanomesh, palisade).

uses(wolverine, adamantium).
uses(vader, lightsabre).
uses(conan, battleaxe).
uses(richard, rock).

win(X,Y) :- beats(X,Y).
win(X,Y) :- better(X,Y).
win(X,Y) :- better(X,'underscore here'), beats('underscore here',Y).
win(X,Y) :- better(X,A), better(Y,B), win(A,B).
win(X,Y) :- uses(X,A), uses(Y,B), !, win(A,B).

play(X,Y,X) :- win(X,Y).
play(X,Y,Y) :- win(Y,X).

问题是问我会得到什么结果

?- win(X, nanomesh).

答案应该是 X = lightsabre。但是我真的不明白为什么。

有人能解释一下吗?

最佳答案

您可以通过多种方式尝试理解此特定查询。一种方法是将目标 false 添加到您的程序中,这样您仍然可以获得相同的答案。通过添加 false 程序是专门的。如果它仍然得到相同的答案,我们就知道负责任的部分在可见区域。 划线 部分表示您现在可以完全忽略的子句。

beats(rock, scissors) :- false.beats(scissors, paper).beats(paper, rock) :- false.better(battleaxe, scissors).better(lightsabre, battleaxe).better(boulder, rock) :- false.better(adamantium, boulder) :- false.better(palisade, paper).better(nanomesh, palisade).win(X,Y) :- beats(X,Y).win(X,Y) :- false, better(X,Y).win(X,Y) :- false, better(X,'underscore here'), beats('underscore here',Y).win(X,Y) :- better(X,A), better(Y,B), win(A,B).?- win(lightsabre, nanomesh).

So you have two chains:

nanomesh   -> palisade  -> paper` 
lightsabre -> battleaxe -> scissors

最后剪刀打败了

虽然我不确定我是否同意这种推理。

关于Prolog查询练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946810/

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