- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ - У Клоксин
Шрифт:
Интервал:
Закладка:
?- 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 С».
Специальные встроенные предикатыИмена и назначение встроенных предикатов сильно отличаются от рассмотренных в данной книге. Ниже приводится краткое описание некоторых из предусмотренных средств.