对这个prolog脚本有点困惑..
/*frame representation */
frame(name(bird), isa(animal), hasproperty([fly, feathers, sing])).
frame(name(canary),isa(bird), hasproperty([yellow, nervous, easily_frightened])).
frame(name(tweety), isa(canary), hasproperty([baby, my_pet])).
frame(name(barn_owl), isa(bird), hasproperty([nocturnal,large_eyes])).
frame(name(barny), isa(barn_owl), hasproperty([sick,forward_facing])).
/* inheritance -using recursion*/
inherit(Concept, Prop):- frame(name(Concept), _, hasproperty(Prop)).
inherit(Concept, Prop):-
frame(name(Concept), isa(Parent), _),
write(Parent), nl,
frame(name(Parent), _, hasproperty(PP)),
write(PP), nl,
inherit(Parent, NewProp).
我理解第一个规则,它检查概念是否具有某个属性,但是我没有完全得到第二个规则..我知道如果它继承的框架具有某种属性,它应该可以解决但是我不确定它是如何检查这一点的,特别是当属性名称从PP变为NewProp时。如果有两个具有相同名称的规则,prolog如何知道在此脚本中执行哪个规则?欢呼任何帮助!
答案 0 :(得分:1)
我认为你想要做的事情,在inherit
的第二个子句中,找到你的概念的父,然后马上调用inherit。现在,你正在做一半的工作。
inherit(Concept, Prop):- frame(name(Concept), _, hasproperty(Prop)).
inherit(Concept, Prop):-
frame(name(Concept), isa(Parent), _),
write(Parent), nl,
inherit(Parent, Prop).