Скачиваний:
20
Добавлен:
01.05.2014
Размер:
287.74 Кб
Скачать

Компилятор

Для Эрити Пролога существует компилятор.

Запомненные состояния

При помощи встроенного предиката "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".

Соседние файлы в папке Гл.6,7,Прилож.,Допол