Теперь, когда вы имеете в своем распоряжении достаточно большой арсенал средств Пролога, вам следует перейти к следующей главе, в которой обсуждаются некоторые вопросы, не рассматривавшиеся в этой главе. Кроме того, мы покажем, какие средства для работы с числами имеются в Прологе. Черты языка, рассматриваемые в нескольких последующих главах, делают очевидными выразительные возможности и удобство Пролога.
Упражнение 1.2.При применении правила является_сестройк обсуждавшейся ранее базе данных, содержащей информацию о семействе королевы Виктории, может быть получено несколько ответов. Объясните, как могут быть получены все ответы и каковы они.
Упражнение 1.3.В основу этого упражнения положено одно из упражнений из книги Kowalski R. Logic for Problem Solving,North Holland, 1979. Предположим, что кем-то уже написаны на Прологе утверждения, определяющие следующие отношения:
отец(Х,Y) /* X является отцом Y */
мать(Х, Y) /* X является матерью Y */
мужчина(Х) /* X мужчина */
женщина(Х) /* X - женщина */
родитель(Х,Y) /* X является родителем Y */
различны(Х,Y) /* X и Y различны */
Задача состоит в том, чтобы написать правила для следующих отношений:
является_матерью(Х) /* X является матерью */
является_отцом(Х) /* X является отцом */
является_сыном(Х) /* X является сыном */
является_сестрой(Х,Y) /* X является сестрой Y */
дедушка(Х, Y) /* X является дедушкой Y */
общие_родители(Х,Y) /* X и Y имеют общих родителей*/
Например, мы могли бы написать правило для предиката тетя,при условии что у нас уже имеются правила для женщина, общие_родителии родитель.
тетя(Х,Y):- женщина(Х), общие_родители(X, Z), родитель(Z,Y).
Это можно также записать следующим образом:
тетя(Х,Y):- является_сестрой(Х,Z), родитель(Z, Y).
при условии что мы имеем правило для отношения является_сестрой.
Упражнение 1.4.Используя правило для отношения является_сестрой,определенное в тексте, объясните, каким образом становится возможным, что некто может быть своей собственной сестрой. Как можно было бы изменить это правило, если такое свойство нежелательно? Считайте, что предикат различныиз
упр. 1.3 уже определен.
ГЛАВА 2 БОЛЕЕ ДЕТАЛЬНОЕ ОПИСАНИЕ
2.1. Синтаксические правила
Пролог-программы состоят из термов.Терм это либо константа,либо переменная,либо структура.Каждый из этих термов фигурировал в предыдущей главе, но не назывался там таким именем. Терм записывается как последовательность литер.Литеры делятся на четыре категории:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abсdefghijklmnopqrstuvwxyz
0123456789
+-*/\^~:.?@#$&
Первая строка состоит из прописных букв.Вторая строка из строчных букв.В третьей строке цифры.В четвертой строке перечислены специальные литеры (спецзнаки).В действительности спецзнаков больше, чем показано в четвертой строке, но остальные используются только в особых случаях, обсуждаемых ниже . Для термов каждого типа, таких как константа, переменная, структура, имеются свои правила образования имен термов из литер. Ниже вкратце обсуждаются каждый из типов термов.
2.1.1. Константы
нравится мэри джон книга вино имеет драгоценности может_украсть
Специальные символы, используемые Прологом для обозначения вопросов '?-' и правил ':-', также являются атомами. Есть два вида атомов: составленные из букв и цифр и составленные из спецзнаков. Первые, как мы видели в предыдущей главе, должны обычно начинаться со строчной буквы. Атомы, составленные из спецзнаков, как правило, состоят толькоиз спецзнаков. Иногда возникает необходимость иметь атом, начинающийся с прописной буквы или цифры. Если атом заключается в одиночные кавычки, то его имя может содержать любыелитеры. И наконец, для простоты чтения внутрь атома можно включать специальную литеру подчеркивание '_'. Ниже приведено несколько атомов:
а
свободный
=
'джордж-смит'
--
джордж_смит
ieh2304
Следующие объекты не являются атомами:
2304ieh
джордж-смит
Пустой
_ альфа
Другой вид констант, целые числа, используется для представления числовых данных, что позволяет выполнять над ними арифметические операции. В предыдущей главе не обсуждались способы выполнения арифметических операций в Прологе, такие средства будут определены ниже. Целые числа состоят только из цифр и не могут содержать десятичной запятой. В этой книге будут использоваться сравнительно небольшие положительные числа, такие как
0 1 999 512 8192 14765 6224
Пролог реализован на различных ЭВМ и в зависимости от того, на какой именно ЭВМ работает программист, ему может быть разрешено или не разрешено использовать большие или отрицательные числа. Однако в данной книге приводятся только примеры, допустимые для любой из существующих версий Пролога. Можно утверждать, что всегда разрешается использовать
числа из диапазона от 0 до 16 383. Возможно, что на доступной читателю ЭВМ допустимы и другие числа (превышающие 16 383 или отрицательные), однако дальнейшее изложение этого не учитывает. Может быть, это покажется удивительным, однако в задачах, в которых оказался полезным Пролог, как правило, не нужны средства для работы с очень большими, дробными или отрицательными числами. Тем не менее, поскольку Пролог является расширяемым языком, программист, обладающий соответствующими ресурсами, может без особого труда добавить к системе предикаты, определяющие такие возможности. Например, некоторые Пролог-системы предоставляют пользователям библиотечные программы, определяющие операции над рациональными числами и числами произвольной точности.