我是Prolog的新手,我无法理解OR运算符“;” 所以这是一个例子: -
/*attributes(Person,Eats,Footwear).*/
attributes( personA,
eats(fried;baked),
footwear(shoes;slippers)
).
attributes( personB,
eats(roasted;baked),
slippers
).
person(Person, Eats, Footwear) :-
attributes(Person,
Eats,
Footwear
).
所以我需要区分personA和personB,例如,如果我放入查询
person(Person, roasted, _).
因为只有personB具有烘焙属性,所以它应该返回Person = personB
然后,例如,如果我放入查询
person(Person, baked, _).
由于A和B都有烘焙属性,因此应返回Person = personA
Person = personB
任何人都可以解释如何正确地制定规则。感谢。
答案 0 :(得分:1)
要获得您想要的结果,您必须以这种方式重写知识库(您不能在术语中使用;
):
footwear(personA,slippers).
footwear(personA,shoes).
footwear(personB,slippers).
eats(personA,fried).
eats(personA,baked).
eats(personB,roasted).
eats(personB,baked).
然后你查询:
?- eats(Person,roasted).
Person = personB.
?- eats(Person,baked).
Person = personA
Person = personB
如果您正在进行概率编程,可以将此程序翻译成概率程序,以获得一些有趣的结果。