KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » У Клоксин - ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ

У Клоксин - ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн У Клоксин, "ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ" бесплатно, без регистрации.
Перейти на страницу:

?- retract((mother(A,B):-С)).


фактически рассматривается как


?- retract((mother(A,B):-call(C))).


Если мы хотим удалить первое утверждение для предиката mother независимо от его тела, то для этого можно было бы задать:


?- clause(mother(A,B),C), retract((mother(A,B):-С)).


В этом случае первая цель с clause делает С достаточно конкретизированной, чтобы избежать преобразования.

Дополнительные встроенные предикаты

Помимо встроенных предикатов, описанных нами, в Прологе-10 предусмотрено много других возможностей.

«Условная» форма задания целей, которая позволяет задавать цели в следующем виде:

…, (likes(john,X) --› wooden(X); plastic(X)),…

Идея такой составной цели состоит в следующем. Если цель - «условие», которая задается перед стрелкой --›, согласуется с базой данных, то осуществляется вызов второй цели, заданной непосредственно после --›, иначе осуществляется вызов третьей цели. Любая из этих целей может представлять собой последовательность целей Пролога. Указанные условные цели действуют точно так же, как если бы они были определены в Прологе-10 следующим образом:


?- op(1050,xfy,-›).

?- op(1100,xfy,';').

(X -› Y; Z):- call(X),!, call(Y).

(X -› Y; Z):- call(Z).


Индексированная база данных. Это средство позволяет сопоставлять элементы информации в базе данных с конкретными значениями и обходить стандартный механизм доступа к базе данных, имеющийся в Прологе. Например, если бы вы захотели хранить информацию о возрастах сотен людей, то стандартный подход потребовал бы завести сотни утверждений для некоторого предиката age (возраст). И когда затем вы бы пожелали выяснить возраст конкретного человека, Пролог должен был бы осуществить просмотр всех утверждений, пока не нашел бы нужный. Беда в том, что при обычном подходе информация сопоставляется с предикатом и, когда предикат содержит много утверждений, объем поиска может быть большим. Индексированная база данных позволяет сопоставлять информацию с конкретным именем более прямым способом.

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

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

Средства отладки

В Прологе-10 предусмотрены средства отладки, соответствующие тому, что было нами рассмотрено. В дополнение к встроенным предикатам отладки, описанным в гл. 8, предусмотрен предикат, позволяющий указать, какие события являются управляемыми во время трассировки.

Литература

DECsystem-10 Prolog User's Manual, Department of Artificial Intelligence, University of Edinburg, Scotland.- Представляет собой руководство пользователя Пролога-10.

C-Prolog User's Manual, CAAD Studio, Department of Architecture, University of Edinburg, Scotland.- Описывается система, работающая под управлением операционной системы UNIX,

Prolog-1 User's Manual, Expert Systems Ltd, 9 West Way, Oxford, England.- Описывает систему, работающую на многих ЭВМ, от Z-80 под управлением операционной системы СР/М до VAX 11 под управлением операционной системы VMS.

ПРИЛОЖЕНИЕ Е. МИКРО-ПРОЛОГ

В этом приложении рассматриваются некоторые возможности системы микро-Пролог, разработанной для микро-ЭВМ на базе микропроцессора Z-80, работающих под управлением операционной системы СР/М.

Пример сеанса работы

Все приводимые примеры соответствуют «базовому» синтаксису. При желании можно воспользоваться другими формами синтаксиса, включая тот, что совместим с Прологом для ЭВМ DECsystem-10.

Ниже приводится последовательность сообщений, которая может появиться на вашем терминале в ходе обычного сеанса работы с микро-Прологом. Прежде всего мы задаем для СР/М команду запуска Пролога.


A›PROLOG

Micro-Prolog 3.00 S/N

(С) 1982 Logic Programming Associates Ltd.

9999 Bytes Free

&.?((likes x y))

Clause error at (likes x y)


В микро-Прологе литеры «&» выдаются в качестве приглашения. Их появление означает, что система ожидает от нас ввода команды. Ввод литеры «?» означает, что мы хотим задать вопрос. Вслед за ним должна следовать последовательность целей, заключенная в круглые скобки (которую следует понимать как конъюнкцию этих целей). Каждая цель внутри скобок представляет собой последовательность из имени предиката и следующих за ним аргументов. Переменные обозначаются именами, начинающимися с х, у, z, X, Y, Z, за которыми могут следовать числа. В вопросе, приведенном выше, спрашивается о том, нравится ли кто-либо кому-либо. Но поскольку в базе данных нет утверждений для предиката likes (нравится), то микро-Пролог сообщает об ошибке.


&.LOAD TEST


Другая важная команда – это LOAD. Далее следует имя файла. Ввод этой команды приводит к чтению содержимого файла TEST.LOG и дополнению этим содержимым базы данных, подобно тому, как это делалось при consult. Теперь можно задавать вопросы:


&.?((likes john bertrand))

?

&.?((likes john alfred))

&.


Заметим, что отрицательный ответ на вопрос обозначается в микро-Прологе литерой «?», а положительный ответ – повторной выдачей приглашения. Чтобы узнать, какие утверждения имеются для предиката likes, мы задаем команду LIST. Можно запросить выдачу текста всей программы или выдачу утверждений для некоторого набора предикатов. Посмотрим, какие утверждения существуют для предиката likes:


&. LIST(likes)

((likes john alfred))

((likes alfred john))

((likes bertrand john))

((likes david bertrand))

((likes john x) (likes x bertrand))


В некоторых случаях для того, чтобы получить ответ на заданный вопрос, приходится прибегать к помощи встроенных предикатов. Предикат РР обеспечивает выдачу его аргументов на терминал, а предикат FAIL вызывает неудачное согласование целевого утверждения.


&.?((likes john х) (РР х) (FAIL))

alfred

david

?


Так мы получили два ответа на вопрос: «Кто нравится Джону?». Если мы хотим добавить к базе данных новые утверждения с терминала, нам не нужно прибегать к помощи специальных команд – мы можем просто ввести эти утверждения. Синтаксис утверждений микро-Пролога будет рассмотрен в следующем разделе.


&.((likes timothy bertrand))

&.?((likes john x) (PP x) (FAIL))

alfred

david

timothy

?


Чтобы выйти из микро-Пролога и вернуться в СР/М, достаточно задать команду QT, за которой следует поставить точку:


&. QT.

А›

Синтаксис

Синтаксис микро-Пролога существенно отличается от синтаксиса, рассматриваемого в данной книге, однако освоить его можно довольно быстро. Основная идея заключается в том, что существует всего один вид терма – список. Если мы хотим построить терм с функтором f и четырьмя аргументами, то для этого используется список из пяти элементов, куда f входит в качестве головы, а остальные элементы соответствуют четырем аргументам в порядке их следования. Таким образом то, что в базовом синтаксисе было бы записано в виде:

f(a,g(2,3),c)

на микро-Прологе должно быть записано как:

(f a (g 2 3) с)

Здесь мы сталкиваемся также и с иным синтаксисом задания списков, где списки заключены в круглые скобки, а элементы списков разделяются пробелами.

Утверждения представляются как списки термов, где первый терм – это заголовок утверждения, а остальные термы – цели, которые, будучи взятыми в конъюнкции, образуют тело утверждения. Рассмотрим более сложное утверждение:

((alter (zl|z2) (x|y)) (change zl x) (alter z2 у)

Это – второе утверждение для предиката alter (преобразовать) из разд. 3.4. Заметим, что вертикальная черта имеет здесь то же значение, что и в базовом синтаксисе.

Различные ограничения

Микро-Пролог может обрабатывать числа с плавающей точкой с точностью до восьми значащих цифр и с порядком (по основанию 10) в диапазоне от -127 до 127. Имена атомов (называемые в микро-Прологе «константами») могут содержать до 60 литер, а терм не может содержать более 64 переменных. Эти ограничения на практике не вызывают трудностей.

Возможности окружения

Микро-Пролог предоставляет множество средств, помогающих при разработке программ за терминалом. Предикаты LOAD и SAVE позволяют, соответственно, читать и записывать программы в файлы на диске. Мощный строчный редактор и структурный редактор позволяют вносить изменения в тексты программ, не выходя из Пролог-системы. Выполнение микро-Пролог-программы может быть прервано путем ввода комбинации «CONTROL С».

Специальные встроенные предикаты

Имена и назначение встроенных предикатов сильно отличаются от рассмотренных в данной книге. Ниже приводится краткое описание некоторых из предусмотренных средств.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*