我想定义在序言以下规则:
当X
是渴了, X
应该去酒吧。
之后,我会问Prolog的thirsty(X)
和序言应归还去(酒吧)
我已经尝试过的方式如下:
go(Y).
thirsty(X) :- go(bar).
但是,当我与测试
thirsty(bob).
结果只会是true
。 有人可以帮助我什么,我不得不改变让go(bar)
的结果呢?
我想定义在序言以下规则:
当X
是渴了, X
应该去酒吧。
之后,我会问Prolog的thirsty(X)
和序言应归还去(酒吧)
我已经尝试过的方式如下:
go(Y).
thirsty(X) :- go(bar).
但是,当我与测试
thirsty(bob).
结果只会是true
。 有人可以帮助我什么,我不得不改变让go(bar)
的结果呢?
当
X
是渴了,X
应该去酒吧。
看着这句话的前半部分,“当X
是渴”,有明确渴了一个属性, X
可以有,所以thirsty
是个不错的谓词的声音( thirsty(X)
表示X
是渴)。
再有就是看句子的第二部分的一些方法,“ X
应该去酒吧”,我会写下面的一些与过去是什么,我想你想日益复杂的顺序:
X
,在这种情况下,你可以定义谓词should_go_to_the_bar
作谓语,使should_go_to_the_bar(X)
表示X
应该去酒吧。 那么你的程序可以是:
thirsty(bob).
should_go_to_the_bar(X) :- thirsty(X).
?- should_go_to_the_bar(bob).
True
X
和the_bar
,使得should_go_to(X, the_bar)
意味着X应该去the_bar。 那么你的程序可以是:
thirsty(bob).
should_go_to_the_bar(X, the_bar) :- thirsty(X).
?- should_go_to(bob, X).
X = the_bar
go_to(X, the_bar)
从而使should(go_to(the_bar))
意味着它应该是go_to(X,the_bar)。 那么你的程序可以是:
thirsty(bob).
should(go_to(X, the_bar)) :- thirsty(X).
?- should(X).
X = should(go_to(bob, the_bar))
X
,他们可以这样做一个动作go_to(X, the_bar)
这样should(X, go_to(X, the_bar)
意味着X应该go_to (X,the_bar),即X应该是真的,“X去了吧。” 那么你的程序可以是:
thirsty(bob).
should(X, go_to(X, the_bar)) :- thirsty(X).
?- should(bob, Action).
Action = go_to(bob, the_bar)
我想,这最后的解释是最接近你想要什么。
go(Y).
作为一项规则并不真正意味着什么,除了去任何地方,也许吧。 当你断言Prolog的规则,你应该能够在一定语义分配给他们。 您的规则说, 如果X
是渴了,那么bar
是去这当然总是成功的,因为一个地方 bar
总是去的地方,因为是别的任何地方,你可能想去根据您的规则, go(Y)
。 既然你没有使用X
你随时随地thirsty(X)
谓语从句体,它从来没有使用过(所以你可能看到关于一个单变量警告)。
定义在序言一个很好的规则是第一个有关说明你的规则,首先一个明智的方式。 可能涉及一个人一个合理的规则可能是:
Person
去酒吧,如果Person
是渴。
这可能被表述为:
go_bar(Person) :- thirsty(Person).
或者更一般地,
goes(Person, bar) :- thirsty(Person).
goes(Person, restaurant) :- hungry(Person).
然后,你需要断言关于人的一些事实(或查询这些事实的用户):
thirsty(bob).
随着这一事实断言,可能会导致以下查询:
?- goes(bob, X).
X = bar