Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »