Чтение онлайн

на главную - закладки

Жанры

Программирование на языке пролог
Шрифт:

ab

yes

(не забывайте, что "а" – это список, состоящий из одного числового кода, соответствующего первой строчной букве алфавита).

Синтаксис отрицания. Предикат с именем notне предусмотрен, но вместо него используется инфиксный оператор '\+' Отсутствует оператор «не равно» ('\=').

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

вида

…, call(X),…

достаточно поставить на место цели саму эту переменную:

…, X,…

При этом использование варианта с callтакже возможно. Более того, при применении к такому утверждению assertaили assertzсистема преобразует цель X в цель call(X).

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

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

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

mother(A,B):- С.

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

mother(X,Y):- parent(X,Y), female(Y).

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

?- 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 (нравится),то микро-Пролог сообщает об ошибке.

Поделиться:
Популярные книги

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11

Первый среди равных. Книга IV

Бор Жорж
4. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IV

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Мастер Разума IV

Кронос Александр
4. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума IV

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

Кадры решают все

Злотников Роман Валерьевич
2. Элита элит
Фантастика:
боевая фантастика
попаданцы
альтернативная история
8.09
рейтинг книги
Кадры решают все

Плеяда

Суконкин Алексей
Проза:
военная проза
русская классическая проза
5.00
рейтинг книги
Плеяда

Потусторонний. Книга 2

Погуляй Юрий Александрович
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Потусторонний. Книга 2

Ученик. Книга 4

Первухин Андрей Евгеньевич
4. Ученик
Фантастика:
фэнтези
5.67
рейтинг книги
Ученик. Книга 4

Законник Российской Империи. Том 3

Ткачев Андрей Юрьевич
3. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
5.00
рейтинг книги
Законник Российской Империи. Том 3

Ваше Сиятельство 7

Моури Эрли
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Ваше Сиятельство 7

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Младший сын князя. Том 4

Ткачев Андрей Юрьевич
4. Аналитик
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Младший сын князя. Том 4