Inheritance prolog中的关联继承

Inheritance prolog中的关联继承,inheritance,prolog,rules,Inheritance,Prolog,Rules,我正在尝试将对象的关联应用于分配的后代对象 whatProperty(canary, X, Y). 产生黄色的颜色,但不是从鸟类和动物身上继承下来的特性 这段代码的意思是“如果X是Y,Y有属性Z,那么X有属性Z”。但由于某些原因,它显然不起作用 hasproperty(X, Z, W) :- isa(X, Y), hasproperty(Y, Z, W). 以下是完整的代码: isa(bird, animal). isa(canary, bird). hasproperty

我正在尝试将对象的关联应用于分配的后代对象

whatProperty(canary, X, Y).
产生黄色的颜色,但不是从鸟类和动物身上继承下来的特性

这段代码的意思是“如果X是Y,Y有属性Z,那么X有属性Z”。但由于某些原因,它显然不起作用

hasproperty(X, Z, W) :-
    isa(X, Y), hasproperty(Y, Z, W).
以下是完整的代码:

isa(bird, animal).
isa(canary, bird).    

hasproperty(animal, covering, skin).
hasproperty(bird, covering, feathers).
hasproperty(bird, travel, fly).
hasproperty(canary, colour, yellow).

hasproperty(X, Z, W) :-
    isa(X, Y), hasproperty(Y, Z, W).

whatProperty(Object, X, Y) :-
    hasproperty(Object, X, Y).

它起作用了。使用内置的“所有解决方案”,或使用
回溯。示例:
?-findall(X/Y,whatProperty(canary,X,Y),L)。L=[颜色/黄色,覆盖物/羽毛,旅行/飞行,覆盖物/皮肤]。
如何使用;?当您按下
时,Prolog会自动回溯。它回溯寻找使查询成功的其他实例化。