Prologで継承チェック述語を定義しようとしていますis_a/2
が、これまでのところすべての試行が失敗しました。
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).
助言がありますか?