Меллиш К. - Программирование на языке пролог стр 13.

Шрифт
Фон

2.1.2. Переменные

XYZ

Ответ

Ввод

Большая_Выплата

_3_слепые_мыши

Иногда возникает необходимость в использовании переменной, имя которой не будет нигде употребляться. Например, если необходимо определить, нравится ли кому-нибудь Джон, и при этом не важно, кому именно он нравится, можно использовать анонимную переменную.

Анонимная переменная это одиночный знак подчеркивания '_'. Наш пример с Джоном записывается на Прологе следующим образом:

?- нравится(_,джон).

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

2.1.3. Структуры

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

Структуры служат средством организации данных в программе, поскольку они позволяют рассматривать как единый объект (карточку-указатель) группу отдельных элементов данных. Способ, которым осуществляется разложение данных на компоненты, зависит от решаемой задачи, В книге будут приведены некоторые рекомендации на этот счет.

Структуры полезны также в тех случаях, когда имеется общий тип и может существовать много конкретных экземпляров объектов этого типа. Например, книги. В главе 1 приводился факт

имеет(джон, книга).

обозначающий, что у Джона есть некоторая конкретная книга. Если затем будет сформулирован факт

имеет(мэри, книга).

то это означает, что у Мэри есть тот же самый объект, что и у Джона, поскольку в обоих фактах фигурирует одно и то же имя. Не существует другого способа указания факта, что объекты различны, кроме присвоения им различных имен. Можно было бы уточнить приведенные факты:

имеет(джон,грозовой_перевал).

имеет(мэри,моби_дик).

явно указав, какие именно книги есть у Джона и Мэри. Однако в больших программах обилие различных констант, смысл которых из контекста не очевиден, может вызвать затруднения. Человек, читающий данную Пролог-программу, может не знать, что константа грозовой_перевалпредставляет собой название книги Эмили Бронте, жившей в Йоркшире

(Англия) в 19-м веке. Можно было бы, скажем, предположить, что Джон назвал так своего любимого кролика. С помощью структур можно предоставить читателю необходимый контекст.

Структура записывается на Прологе с помощью указания ее функтораи компонент.Компоненты заключаются в круглые скобки и разделяются запятыми. Функтор записывается перед открывающей круглой скобкой. Рассмотрим факт, заключающийся в том, что у Джона есть книга с названием «Грозовой перевал», написанная Эмили Бронте:

имеет(джон,книга(грозовой_перевал, бронте)).

Внутри факта имеетнаходится структура с именем книга,имеющая две компоненты: название и автор. Поскольку структура книгапоявляется внутри факта как один из его аргументов, она действует как объект, принимая участие в отношении. При желании можно было бы создать еще одну структуру для идентификации автора, поскольку существовали три писательницы с фамилией Бронте:

имеет(джон,книга(грозовой_перевал, автор(эмили, бронте))).

Структуры с переменными в качестве компонент могут появляться в вопросах. Например, можно было бы спросить, есть ли у Джона какая-либо книга сестер Бронте:

?- имеет(джон,книга(Х,автор(Y, бронте))).

Если будет доказано, что это утверждение согласовано с базой данных, то значением Xбудет название книги, а значением Y имя автора. В тех случаях, когда переменные в дальнейшем не используются, можно употребить анонимную переменную:

?- имеет(джон, книга(_, автор(_,бронте))).

Напомним, что анонимные переменные не «сцепляются» друг с другом.

Структуру книгаможно было бы еще улучшить, добавив аргумент, указывающий экземпляр книги. Например, третий аргумент, на место которого следует ставить целое число, дал бы нам возможность однозначно идентифицировать книгу:

имеет(джон, книга (улисc, автор(джеймс,джойс), 3129)).

что соответствует следующей фразе на естественном языке: Джон имеет 3129-й экземпляр книги Джеймса Джойса «Улисс».Если у читателя сложилось впечатление, что синтаксис структур совпадает с синтаксисом фактов, то нам остается только подтвердить его правоту. Предикат (используемый в фактах и правилах) является на самом деле функтором некоторой структуры. Аргументы факта или правила это компоненты структуры. Представление самих Пролог-программ в виде структур обладает многими достоинствами. Сейчас преждевременно обсуждать эти достоинства, однако читателю все же следует помнить, что все части Пролога, даже сами Пролог-программы, состоят из констант, переменных и структур.

2.2. Литеры

В Прологе имеются два типа литер: печатаемыелитеры и непечатаемыелитеры. Печатаемые литеры обладают визуальным образом, появляющимся на терминале при выводе. Непечатаемые литеры такого образа не имеют, но при выводе они вызывают выполнение некоторых действий. Этими действиями могут быть пропуск пустого места («печать» пробела), переход на новую строку, подача звукового сигнала. Ниже приведены все печатаемые литеры, которые можно использовать в Пролог-программах.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке