- •Приложение 4-5
- •IV. Версии языка пролог СиПролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда для разработки программ
- •Отладчик
- •Отладочные команды
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения языка
- •Квинтус Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Система программирования на Прологе фирмы Сайлоджик Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Пролог-2 Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Эрити Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Расширения
- •Унсв Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Турбо Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •V. Ответы к упражнениям Ответы к упражнениям
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
Компилятор
Для Эрити Пролога существует компилятор.
Запомненные состояния
При помощи встроенного предиката "save/0" можно запомнить все изменения сегментов программы, сделанные после предыдущего обращения к этому предикату. Изменения запоминаются в двоичном файле. Встроенный предикат "restore/0" ликвидирует все изменения текущей программы, сделанные после последнего обращения к предикату "save/0".
Аргументом встроенного предиката "save/1" является имя файла. Предикат "save/1" позволяет запомнить двоичный образ текущего состояния интерпретатора Пролога. Этот предикат помещает фразы каждого сегмента в отдельный файл. В качестве аргумента встроенного предиката "restore/1" используется имя файла, которое ранее употреблялось при обращении к предикату "save/1". Предикат "restore/1 " восстанавливает состояние интерпретатора Пролога, описанное в файле.
Расширения
В Эрити Пролог включено DCG-расширение, которое было описано выше в разделе, посвященном СиПрологу. Среди других расширений можно назвать одну из версий языка запросов к базе данных SQL и пакет для разработки экспертных систем.
Разное
В Эрити Прологе имеются два способа увеличения скорости доступа к базам данных, состоящим из фактов, —индексация при помощи b-дерева и индексация с помощью хеш-таблицы.
В-деревья
Для того чтобы хранить базу данных, состоящую из фактов, в отсортированном по значениям одного из аргументов виде, можно воспользоваться b-деревом. Новые факты добавляются в базу данных при помощи встроенного предиката « recordb (Дерево, ПолеСортировки, Факт)», где «Дерево» - имя дерева, «Факт» - факт, а «ПолеСортировки» -один из аргументов переменной «Факт» . Если « Дерево» пока не существует, то оно будет создано этим предикатом. Обратите внимание на то, что база данных, созданная предикатом "recordb", не имеет такой же формы, как множество фактов программы, и к ней нельзя непосредственно адресовать запросы. Все запросы к такой базе должны направляться через встроенный предикат "retrieveb/3", аргументы которого будут точно такими же, как и у предиката "recordb/3". Факт можно удалить из базы данных посредством обращения к встроенному предикату "removeb/3".
Хеш-таблицы
Для хранения базы данных в таком виде, чтобы все факты с одинаковыми значениями одного из аргументов располагались вместе, можно воспользоваться хеш-таблицей. Хеш-таблица может значительно повысить эффективность выполнения запроса к базе данных, если хешируемый аргумент конкретизируется в запросе. Новые записи добавляются в базу данных при помощи встроенного предиката « recordh (Таблица, ПолеСортировки, Факт)», где « Таблица» - имя таблицы, «Факт» -это факт, а «ПолеСортировки» - один из аргументов Факта. Если «Таблица» еще не существует, то она создается данным предикатом. База данных, созданная встроенным предикатом "recordh", не выглядит как множество фактов программы, и к ней нельзя непосредственно адресовать запросы. Все запросы к такой базе следует направлять через встроенный предикат "retrieveh/3". Удалить факт из базы данных можно при помощи встроенного предиката "removeh/3", В других версиях Пролога хеш-таблицу можно построить только для первого аргумента фразы, а в Эрити Прологе встроенные предикаты хеширования позволяют строить хеш-таблицу для любого аргумента.
В Эрити Прологе имеется механизм сбора мусора, который автоматически вступает в работу, когда число доступных блоков стековой памяти снижается до критического значения. Этот механизм можно также запустить явно при помощи обращения к встроенному предикату "gc".
