Создание базы знаний и запросы в Prolog

Я хочу создать базу знаний, эквивалентную приведенным ниже утверждениям в Prolog.

  1. Джон любит всякую еду.

  2. Яблоко и овощ это еда

  3. Все, что кто-либо ест и не убивает, является едой.

  4. Анил ест арахис и все еще жив

  5. Гарри ест все, что ест Анил.

Так что это одна из версий, заимствованных отсюда

После создания этого файла я хочу найти ответ на запрос «Джон любит арахис». говоря likes(john, peanut).

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

      alive(anil).
eats(anil,peanut).
food(apple).
food(vegitables).

food(X):-likes(john,X).

eats(X,Y),not(killed(X)):-food(Y).

eats(anil,X):-eats(harry,X).

killed(X):-not(alive(X)).

alive(X):-not(killed(X)).

Но я получаю ошибки и предупреждения, как показано ниже;

      ERROR:    No permission to modify static procedure `(',')/2'

Warning:    Clauses of eats/2 are not together in the source-file

Warning:    Current predicate: food/1

Warning:    Use ':- discontiguous eats/2.' to suppress this message

Warning:    Clauses of alive/1 are not together in the source-file

Warning:    Current predicate: killed/1

Warning:    Use ':- discontiguous alive/1.' to suppress this message

1 ответ

«Джон любит любую еду».

      likes(john,X) :- food(X).

«Яблоко и овощи — это еда».

      food(apple).
food(X) :- vegetable(X).

«Все, что кто-либо ест и не убит, является едой».

      food(X) :- eats(P,X), alive(P).

«Анил ест арахис и все еще жив».

      eats(anil,peanuts).
alive(anil).

«Гарри ест все, что ест Анил».

      eats(harry,X) :- eats(anil,X).

спрашивать

      ?- likes(john,X).

производит (в SWI Prolog)

      70 ?- likes(john,X).
X = apple ;
ERROR: food/1: Undefined procedure: vegetable/1
   Exception: (9) vegetable(_G19387424) ? fail
   Exception: (8) food(_G19387424) ? fail
71 ?- 

Исправление с помощью

      :- dynamic(vegetable/1).

мы получаем

      75 ?- likes(john,X).
X = apple ;
X = peanuts ;
false.

а так, конечно,

      101 ?- likes(john,peanuts).
true .
Другие вопросы по тегам