Cтраница 2
Цепная базовая конъюнкция соответствует цепному запросу-соединению, а циклическая базовая конъюнкция соответствует циклическому запросу-соединению, в главе 8 при рассмотрении языка программирования Дейталог будет представлен метод отображения целей логического программирования в запросы реляционной алгебры. [16]
Разные интерфейсы Пролога обладают различными возможностями для конструирования базовых конъюнкций. Мы рассмотрим случаи, в которых при конструировании базовых конъюнкций необходимо использовать композицию правил, перестановку предикатов, специальный предикат отсечения, дизъюнкцию, отрицание и рекурсию. Не все интерфейсы Пролога способны обрабатывать каждый из перечисленных случаев. [17]
Как мы уже говорили, в корректной Пролог-программе экспортируемые переменные отрицательных базовых конъюнкций должны появляться слева от отрицания. [18]
Композиция правил - основная операция, используемая при построении базовых конъюнкций. [19]
В следующем разделе мы рассмотрим использование композиции правил для генерирования больших базовых конъюнкций. [20]
Поскольку СУБД достаточно эффективны, максимальная эффективность СРЯ-систем достигается при использовании больших базовых конъюнкций. [21]
Для обеспечения корректных вычислений необходимо, чтобы все экспортируемые переменные в базовой конъюнкции отрицания появлялись слева от отрицания. Таким образом, в процессе выполнения отрицания они окажутся связанными. [22]
Мы видели, что запросы максимально ограничены, если интерфейс Пролога производит наибольшие базовые конъюнкции. Ниже мы рассмотрим механизмы, позволяющие избегать повторных выполнений запроса. Для этого часть информации может храниться в буферах основной памяти, или в резидентной в оперативной памяти базе данных Пролога. [23]
После неудачи производится проверка, чтобы определить, был ли текущий экземпляр базовой конъюнкции уже запрошен из базы данных. [24]
Очевидно, что в ЬСРЯ-системах параллельное выполнение запросов возможно, поскольку каждую базовую конъюнкцию можно выполнить независимо от остальных перед активизацией механизма Пролога. [25]
Основное ограничение подхода состоит в том, что вместо сопоставления со всей базовой конъюнкцией происходит раздельное сопоставление с каждым базовым предикатом. В результате операция соединения выполняется не в среде СУБД, а в основной памяти Пролога. Практически каждый предикат базы данных в среде СУБД обрабатывается отдельно от других. Этот подход эффективен в том случае, когда один и тот же предикат базы данных соединяется с различными предикатами базы данных в одной программе. Однако он может оказаться и неэффективным, поскольку избирательность операции соединения теряется, и, следовательно, возникает необходимость хранения больших объемов данных. [26]
Первая из рассматриваемых схем кэширования заключается в том, что все найденные для базовых конъюнкций кортежи помещаются в резидентную в оперативной памяти базу данных Пролога. Управление этим процессом должно осуществляться интерфейсом Пролога. [27]
Если при помощи некоторого интерфейса базы данных извлекается первый факт ( что позволяет произвести унификацию с ним текущей базовой конъюнкции), интерфейс Пролога может возобновить работу механизма Пролога. В то же время интерфейс базы данных продолжает загружать остальные факты в основную память. [28]
В рассмотренном примере отрицание обрабатывается подобно отсечению: хотя положительные и отрицательные предикаты разделяют некоторые переменные, включаются они в разные базовые конъюнкции. Однако такая схема не очень удобна. [29]
В TCPR-сиетемах определение базовых конъюнкций происходит так же, как и в ЬСРЯ-системах. Таким образом, улучшение базовых конъюнкций достигается за счет перемещения констант из головы в тело правил. [30]