辨别两个人的序幕

时间:2018-02-12 07:43:36

标签: prolog

我是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

任何人都可以解释如何正确地制定规则。感谢。

1 个答案:

答案 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

如果您正在进行概率编程,可以将此程序翻译成概率程序,以获得一些有趣的结果。