Программирование на языке Пролог | страница 79




?- число_родителей(Х,Y).


ожидая, что возврат позволит перечислить все возможности. Таким образом, можно сделать следующий вывод:

Если вы вводите отсечения для того, чтобы обеспечить правильную работу программы для целевых утверждений определенной формы, то нет гарантии, что при появлении целевых утверждений иной формы будет происходить что-либо разумное. Отсюда следует, что надежное использование отсечения возможно лишь в том случае, когда вы имеете четкое представление о том, как ваши правила будут использоваться. Если характер использования правил меняется, то необходимо пересмотреть все случаи употребления отсечения.

ГЛАВА 5 ВВОД И ВЫВОД

В предыдущих главах фигурировал только один способ предоставления информации Пролог-программе – обращение к ней с вопросом. Точно так же единственный способ определить значение переменной на некотором этапе доказательства согласованности целевого утверждения с базой данных состоял в построении вопроса таким образом, чтобы Пролог-система напечатала ответ в виде «Х=ответ». В большинстве случаев такого непосредственного взаимодействия с программой посредством вопросов вполне достаточно, чтобы убедиться в том, что программа работает правильно. Однако во многих ситуациях удобно писать программу на Прологе так, чтобы она сама инициировала диалог с пользователем. Например, предположим, что имеется база данных, содержащая информацию о событиях, происходивших в мире в 16-м веке. Информация представлена в виде фактов, включающих дату события и его краткое содержание. Даты могут быть представлены как целые числа, а содержание – в виде списков атомов. Те атомы в списке, которые начинаются с прописной буквы, будут заключаться в одинарные кавычки, чтобы Пролог не принял их за переменные:


событие(1505, ['Начала','Евклида', переведены, на, латинский, язык]).

событие(1510, ['Начало', спора, между, 'Реучлином', и 'Пфефферкорном']).

 событие(1523, [Кристиан, 'II', покинул, 'Данию']).

. . .


Теперь, для того чтобы узнать, что связано с конкретной датой, мы могли бы задать следующий вопрос:


?- событие(1505,Х).


на что Пролог напечатал бы ответ:


Х=['Начала', 'Евклида', переведены, на, латинский, язык]


Представление краткого содержания событий в виде списков атомов дает возможность определить дату событий по некоторым ключевым моментам, имевшим место. Например, рассмотрим предикат когда, который мы определим ниже. Целевое утверждение когда(Х, Y) доказуемо, если в заголовке события, имевшего место в году Y, упоминается X: