我正在尝试is_a/2
在 Prolog 中定义继承检查谓词,但到目前为止我所有的试验都失败了。
只要 Y 是 X的is_a(X, Y)
超类,谓词就应该返回 true。例如:
object(bare).
object(mammal).
object(animal).
object(bird).
is_a(bare, mammal).
is_a(mammal, animal).
is_a(bird, animal).
is_a(X, Y):- <definition goes here>.
定义应使以下查询返回 true:
?- is_a(bare, animal).
true.
我试图以明显的方式定义它,但我陷入了无限循环:
is_a(X, Y):- X\==Y, object(X), object(Y), object(Z), is_a(X, Z), is_a(Z, Y).
有什么建议么?