我是prolog的新手,正在尝试一些东西,特别是我在思考如何在Prolog中做一些特定的事情。我知道事实和规则,事实就是这类东西
specialCustomer(x). //person x is a specialcustomer和规则:
totalSpend(x,500) :- specialCustomer(x). //if x spends 500, he is a special customer这个事实和规则在prolog中是有效的吗?这条规则是错的吗?如何通过prolog查询?就像在调用
totalSpend(bob,500).是一个有效的调用?
抱歉,如果我是在回答我自己的问题,我只是看起来是一个困惑的bit...well!
发布于 2010-02-21 03:31:43
如果你想说鲍勃、吉姆和每个消费超过500美元的人都是特殊客户,那么定义一些人的支出,你可以这样定义:
specialCustomer(bob).
specialCustomer(jim).
specialCustomer(Who) :-
totalSpend(Who, Amount),
Amount >= 500.
totalSpend(mary, 400).
totalSpend(jack, 600).
totalSpend(pam, 500).然后您可以按如下方式查询它:
?- specialCustomer(jim).
true.
?- specialCustomer(mary).
false.
?- specialCustomer(jack).
true.
?- specialCustomer(pam).
true.
?- specialCustomer(X).
X = bob ;
X = jim ;
X = jack ;
X = pam.发布于 2010-02-20 21:56:33
你写的所有东西在语法上都是有效的,但从你的评论来看,它似乎并不像你想要的那样。
specialCustomer(x).这里你说specialCustomer(x)是真的(而specialCustomer(anything_else)是假的)。
totalSpend(x,500) :- specialCustomer(x).这里你是说当specialCustomer(x)为真时,totalSpend(x,500)为真。既然您已经将特殊客户定义为true,那么您也可以编写
totalSpend(x,500).您的注释使它看起来好像您认为:-之前的部分是它后面的部分的条件,但事实恰恰相反。
totalSpend(bob,500).这里您正在询问totalSpend(bob,500)是否为真,但由于没有针对bob的规则,因此它将为false。
请注意,x和bob是符号,而不是变量。所以specialCustomer(x)将是真的,但specialCustomer(bob)不是。
发布于 2010-02-20 22:03:42
也许你想让x成为一个变量?为此,它必须是大写的X。
https://stackoverflow.com/questions/2302347
复制相似问题