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

UptoLike

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

25
pears и apples не сопоставимы. Так как и эта попытка неуспешна, то внут-
ренние унификационные подпрограммы опять повторяют попытку для сле-
дующего предиката likes.
Каждое возможное сопоставление проверяется слева направо. Очевид-
но, что likes(mary, apples) не сопоставимо с likes(mary, oranges).
Внутренние унификационные подпрограммы просматривают всю про-
грамму слева
направо, пробуя сопоставить каждый факт или правило с це-
лью. Только предикаты с соответствующими объектами проверяются на со-
поставимость с целью. Последний кандидат для сопоставления - это факт
likes(mary,apples). Оба объекта в этом факте сопоставимы с соответствую-
щими объектами в предикате цели. Цель успешно доказана. Рассматривая
этот пример, следует
понять, что механизм внутренней унификации обра-
ботал сверху до низу (или слева направо) все подходящие факты и прави-
ла. После того как сопоставимый предикат был найден, объекты этого пре-
диката сопоставлялись слева направо, пока это сопоставление не станови-
лось либо успешным, либо неуспешным. Если сопоставление заканчивалось
неуспешно, то проверялись следующие факты
или правила до тех пор, пока
либо одно из сопоставлений заканчивалось успешно, либо все релевантные
факты и правила оказывались опробованными и неуспешными.
В случае, когда объектами сопоставления являются две константы, то
успешный результат будет лишь тогда, когда они совпадают. Другими сло-
вами, константа всегда сопоставима сама с собой.
2.4.2 Обработка правил и фактов во время унификации
Переменные в Турбо-Прологе являются аналогами местоимений в ес-
тественном (в частности, русском) языке. В определенный момент перемен-
ная может получить некоторое значение. Иногда этого может не произойти.
Возможно вы имеете некоторое представление о поведении переменных,
основанное на других языках программирования. Если это так, то обратите
особое внимание на то,
как ведут себя переменные Турбо-Пролога. Вы мо-
жете обнаружить некоторые неожиданные отличия.
Следующий пример включает кое-что из того, что вы узнали в преды-
дущем разделе о внутренних подпрограммах унификации. Данными являет-
ся факт
likes(mary, apples). /* Мэри любит яблоки */
Вы хотите сформулировать цель, чтобы узнать, что любит
Мэри (если
таковые объекты имеются). Вид этой цели следующий:
likes(mary, What). /* Мэри любит Что */
Вспомним, что в Турбо-Прологе объект, начинающийся с прописной
буквы, есть переменная. Переменная в этой цели есть What (что). Когда
внутренние унификационные подпрограммы пытаются сопоставить эту
цель с фактами или правилами программы, переменная What
не имеет значе-
ния. What не равна нулю и не равна пробелу. Эта переменная не имеет
даже значения, являющегося "мусором" (какой бы мусор не оказался в памя-
ти, отведенной для переменной).
pears и apples не сопоставимы. Так как и эта попытка неуспешна, то внут-
ренние унификационные подпрограммы опять повторяют попытку для сле-
дующего предиката likes.
      Каждое возможное сопоставление проверяется слева направо. Очевид-
но, что likes(mary, apples) не сопоставимо с likes(mary, oranges).
      Внутренние унификационные подпрограммы просматривают всю про-
грамму слева направо, пробуя сопоставить каждый факт или правило с це-
лью. Только предикаты с соответствующими объектами проверяются на со-
поставимость с целью. Последний кандидат для сопоставления - это факт
likes(mary,apples). Оба объекта в этом факте сопоставимы с соответствую-
щими объектами в предикате цели. Цель успешно доказана. Рассматривая
этот пример, следует понять, что механизм внутренней унификации обра-
ботал сверху до низу (или слева направо) все подходящие факты и прави-
ла. После того как сопоставимый предикат был найден, объекты этого пре-
диката сопоставлялись слева направо, пока это сопоставление не станови-
лось либо успешным, либо неуспешным. Если сопоставление заканчивалось
неуспешно, то проверялись следующие факты или правила до тех пор, пока
либо одно из сопоставлений заканчивалось успешно, либо все релевантные
факты и правила оказывались опробованными и неуспешными.
      В случае, когда объектами сопоставления являются две константы, то
успешный результат будет лишь тогда, когда они совпадают. Другими сло-
вами, константа всегда сопоставима сама с собой.
     2.4.2 Обработка правил и фактов во время унификации
      Переменные в Турбо-Прологе являются аналогами местоимений в ес-
тественном (в частности, русском) языке. В определенный момент перемен-
ная может получить некоторое значение. Иногда этого может не произойти.
Возможно вы имеете некоторое представление о поведении переменных,
основанное на других языках программирования. Если это так, то обратите
особое внимание на то, как ведут себя переменные Турбо-Пролога. Вы мо-
жете обнаружить некоторые неожиданные отличия.
      Следующий пример включает кое-что из того, что вы узнали в преды-
дущем разделе о внутренних подпрограммах унификации. Данными являет-
ся факт
            likes(mary, apples).      /* Мэри любит яблоки */
      Вы хотите сформулировать цель, чтобы узнать, что любит Мэри (если
таковые объекты имеются). Вид этой цели следующий:
            likes(mary, What).          /* Мэри любит Что */
      Вспомним, что в Турбо-Прологе объект, начинающийся с прописной
буквы, есть переменная. Переменная в этой цели есть What (что). Когда
внутренние унификационные подпрограммы пытаются сопоставить эту
цель с фактами или правилами программы, переменная What не имеет значе-
ния. What не равна нулю и не равна пробелу. Эта переменная не имеет
даже значения, являющегося "мусором" (какой бы мусор не оказался в памя-
ти, отведенной для переменной).


                                                                      25