TURBO PROLOG. Терёхин В.В. - 30 стр.

UptoLike

Составители: 

30
likes(mary, popcorn). /* Мэри любит кукурузные зерна */
likes(mary, apples). /* Мэри любит яблоки */
Ниже следуют правила, из которых можно сделать вывод о том, что
любит Бет:
likes(beth,X) :- /* Бет любит то, */
likes(mary,X), /* что любит Мэри, */
fruit(X), /* если это фрукт, */
color(X,red). /* и если он красный */
likes(beth,X) :- /* Бет любит
то, */
likes(mary,X), /* что любит Мэри, */
X=popcorn. /* если это кукурузные зерна */
А эти утверждения дают конкретные факты:
fruit(pears). /* персики - фрукт */
fruit(apples). /* яблоки - фрукт */
color(pears, yellow). /* цвет персиков желтый */
color(oranges, orange). /* цвет апельсинов оранжевый */
color(apples, red). /* цвет яблок красный */
color(apples, yellow). /* цвет яблок желтый */
Заметьте, что эти предикаты сами по себе не образуют законченной
программы
на Турбо-Прологе. В следующей главе вы узнаете об остальных
необходимых частях программы.
Ниже дано целевое утверждение, которое используется для выборки
информации из приведенных утверждений:
likes(beth, X).
Эта цель означает "Что любит Beth?". Для того, чтобы ответить на
данный вопрос, внутренние унификационные подпрограммы Турбо-Пролога
ищут факты или
голову правила, сопоставимую с этим целевым утвержде-
нием. Поиск начинается с первого утверждения для отношения likes, которое
содержит три факта о том, что любит Мэри. Турбо-Пролог опробует все ут-
верждения слева направо (сверху вниз). Сопоставление для всех них будет
неуспешным, так как константа beth несопоставима с константой mary.
Внутренние
унификационные подпрограммы Турбо-Пролога переходят
к правилу:
likes(beth, X) :-
likes(mary, X),
fruit(X),
color(X, red).
Переменные, как в голове правила, так и в цели неозначены, так что
цель и голова правила сопоставимы. Так как голова (левая часть) первого
правила сопоставима с целью, то факты правой части становятся подцелями,
которые Турбо
-Пролог должен вычислить, обрабатывая их слева направо.
Вспомним, что Турбо-Пролог рассматривает термы, разделенные запятыми,
как следующие друг за другом, даже если они находятся на разных строках.
      likes(mary, popcorn). /* Мэри любит кукурузные зерна */
      likes(mary, apples).      /* Мэри любит яблоки */
      Ниже следуют правила, из которых можно сделать вывод о том, что
любит Бет:
      likes(beth,X) :-           /* Бет любит то,      */
             likes(mary,X),      /* что любит Мэри,     */
             fruit(X),           /* если это фрукт,     */
             color(X,red).       /* и если он красный */
      likes(beth,X) :-          /* Бет любит то, */
             likes(mary,X),      /* что любит Мэри,     */
             X=popcorn.         /* если это кукурузные зерна */
      А эти утверждения дают конкретные факты:
      fruit(pears).        /* персики - фрукт */
      fruit(apples).              /* яблоки - фрукт */
      color(pears, yellow).      /* цвет персиков желтый */
      color(oranges, orange). /* цвет апельсинов оранжевый */
      color(apples, red). /* цвет яблок красный         */
      color(apples, yellow). /* цвет яблок желтый            */
      Заметьте, что эти предикаты сами по себе не образуют законченной
программы на Турбо-Прологе. В следующей главе вы узнаете об остальных
необходимых частях программы.
      Ниже дано целевое утверждение, которое используется для выборки
информации из приведенных утверждений:
      likes(beth, X).
      Эта цель означает "Что любит Beth?". Для того, чтобы ответить на
данный вопрос, внутренние унификационные подпрограммы Турбо-Пролога
ищут факты или голову правила, сопоставимую с этим целевым утвержде-
нием. Поиск начинается с первого утверждения для отношения likes, которое
содержит три факта о том, что любит Мэри. Турбо-Пролог опробует все ут-
верждения слева направо (сверху вниз). Сопоставление для всех них будет
неуспешным, так как константа beth несопоставима с константой mary.
      Внутренние унификационные подпрограммы Турбо-Пролога переходят
к правилу:
      likes(beth, X) :-
             likes(mary, X),
             fruit(X),
             color(X, red).
      Переменные, как в голове правила, так и в цели неозначены, так что
цель и голова правила сопоставимы. Так как голова (левая часть) первого
правила сопоставима с целью, то факты правой части становятся подцелями,
которые Турбо-Пролог должен вычислить, обрабатывая их слева направо.
Вспомним, что Турбо-Пролог рассматривает термы, разделенные запятыми,
как следующие друг за другом, даже если они находятся на разных строках.




                                                                       30