Я пытаюсь определить предикат проверки наследования is_a/2
в Прологе, но пока все мои испытания не пройдены.
Предикат is_a(X, Y)
должен возвращать true, если Y является суперклассом X.Например:
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).
Есть предложения?