Правило наследования Пролога - PullRequest
2 голосов
/ 12 декабря 2011

Чтобы определить, что животное является бульдогом, у меня есть следующие предикаты:

bulldog(X):-
    body(X,muscular),
    weight(X,heavy),
    face(X,wrinkled),
    nose(X,pushed-in).

Если у меня была собака, назовите ее «фифи» и следующие факты:

body(fifi,muscular).
weight(fifi,heavy).
face(fifi,wrinkled).
nose(fifi,pushed-in).

Когда я введу следующее утверждение:

bulldog(fifi).

, оно вернет true.

Позвольте мне теперь сказать, что у меня был другой бульдог "fofo" и следующий предикат:

bulldog(fofo).

Когда я спрашиваю что-то вроде

body(fofo,muscular). / weight(fofo,heavy).

, тогда оно возвращает false.Что я могу сделать, чтобы Пролог мог распознать характеристику бульдога и вернуть истину?

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

то, что вы написали, это то, что что-то является бульдогом, ЕСЛИ оно мускулистое, тяжелое, сморщенное и толкнутое, но нет, если что-то является бульдогом, оно будет мускулистым, тяжелым, сморщенным в толкании.

для этого вы можете написать:

body(X,muscular):-
   bulldog(X).

и т.д ...

Однако, если у вас есть:

body(X,muscular):-
   bulldog(X).

bulldog(X):-
  body(X,muscular),
  ....

Вы застрянете в бесконечном цикле. Вы можете решить это, используя разные имена предикатов:

body(X,muscular):-
   bulldog(X).

is_bulldog(X):-
  body(X,muscular),
  ....

или как-то обнаружить цикл и остановить его (некоторые версии пролога, такие как XSB поддерживают табулирование)

1 голос
/ 12 декабря 2011

Вам нужно будет добавить дополнительные факты о fofo в базу знаний.Пролог делает предположение о замкнутом мире , означающее, что все, что не доказуемо из фактов / правил, перечисленных в программе, просто ложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...