1.6. Заключение и упражнения
1.6. Заключение и упражнения
К этому моменту мы уже обсудили большинство основных черт языка Пролог. В частности, мы рассмотрели:
• объявление фактов об объектах;
• задание вопросов относительно известных фактов;
• роль переменных и их области действия;
• конъюнкцию как способ описания и-условий;
• представление отношений в виде правил;
• общую схему поиска с механизмом возврата.
С этим небольшим набором элементарных конструкций можно уже писать полезные программы для работы с простыми базами данных. Скорее всего, наиболее правильно так и поступить, работая над упражнениями, приведенными ниже.
Чтобы понять, как пользоваться этой книгой, вам следует прочитать предисловие, если вы не сделали это до сих пор. Кроме того, когда вы начнете писать программы для имеющейся в вашем распоряжении системы программирования на Прологе, вам следует обратиться к соответствующему приложению, чтобы узнать, как организуется взаимодействие с системой. Вы также найдете несколько практических советов в гл. 8.
Теперь, когда вы имеете в своем распоряжении достаточно большой арсенал средств Пролога, вам следует перейти к следующей главе, в которой обсуждаются некоторые вопросы, не рассматривавшиеся в этой главе. Кроме того, мы покажем, какие средства для работы с числами имеются в Прологе. Черты языка, рассматриваемые в нескольких последующих главах, делают очевидными выразительные возможности и удобство Пролога.
Упражнение 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 уже определен.