Cтраница 2
Декларативная семантика Пролога определяет, является ли целевое утверждение истинным, исходя из данной программы, и если оно истинно, то для какой конкретизации переменных. [16]
Отличие состоит только в том, что целевые утверждения, расположенные между GI и Gn, не обязаны быть лишь конъюнкциями предикатов. [17]
![]() |
Пример, иллюстрирующий процедурную семантику Пролога. шаги вычислений, выполняемых процедурой вычислить. [18] |
Конкретные операции, выполняемые в процессе вычисления целевых утверждений, показаны на рис. 2.10. Возможно, следует изучить этот рисунок прежде, чем знакомиться с последующим общим описанием. [19]
В случае OR-параллелизма система вывода параллельно сопоставляет некоторое целевое утверждение с головами дизъюнктов-кандидатов, подходящих для данного сопоставления. При этом осуществляется унификация литер и генерация новых дизъюнктов по методу резолюции для предикатов первого порядка. [20]
Вызов F становится непосредственно решенным, когда выводится целевое утверждение G4; точно так же вызов G становится непосредственно решенным, когда выводится G5, и, стало быть, в этот момент становится решенным вызов С, поскольку F и G являются его непосредственными потомками. [21]
Обычно интерпретатор логических программ начинает свою работу с целевого утверждения, например, такого, как - Р ( х ] & Q ( x) & R ( y), состоящего из трех подцелей Р ( х), Q ( x) и R ( y и пытается с помощью принципа резолюции вывести пустой дизъюнкт. Для этого он ищет подходящий дизъюнкт, который разрешает подцель, скажем, Р ( х) и формирует новое целевое утверждение. В образующемся дереве вывода возникают следующие виды параллелизма. [22]
Заметим, что этот критерий не зависит от целевого утверждения; в нем просто требуется, чтобы множество процедур Р не содержало ничего ложного о проблемной области и полностью описывало специфицируемое отношение. [23]
Таким образом, имеется взаимно однозначное соответствие между целевыми утверждениями в стандартном представлении вычисления в виде их последовательности и фреймами, образующими представление вычисления в интерпретаторе. [24]
Такое ветвление вызывается двумя причинами: наличием в целевых утверждениях нескольких вызовов, которые могут быть активированы, и наличием нескольких процедур, способных ответить на один и тот же вызов. Первая причина устраняется за счет введения строгого порядка выбора вызовов, например правила, согласно которому в целевом утверждении всегда выбирается первый слева вызов. Такого рода правило отрезает лишние ветви в полном дереве вычислений, оставляя при этом поддерево, содержащее все решения программы. Вторая причина проявляется тогда в наличии какого-либо ветвления, остающегося в этом поддереве; оно и вынуждает предпринимать поиск. [25]
Практическое значение этого утверждения состоит в том, что целевое утверждение R ( 0), может быть, гораздо легче доказать, исходя из спецификации, непосредственно описывающей проблемную область, чем из множества ориентированных на вычисления процедур. [26]
В ходе исполнения программы интерпретатор активирует первый вызов из целевого утверждения и затем последовательно просматривает процедуры Р1 - Р5 в поисках первой из них, отвечающей на активированный вызов. [27]
Некоторые множества процедур полны независимо от того, какое поставлено целевое утверждение G. Когда множество процедур Р обладает таким свойством, мы говорим просто, что оно является полным. [28]
Поиск с возвратом является хорошим способом определить все возможные решения целевого утверждения. Но, даже если ваша задача не имеет множества решений, можно использовать поиск с возвратом для выполнения итераций. [29]
В только что рассмотренном примере вычисляемое отношение R оказывается интервалом целевого утверждения G относительно приведенной в предыдущем разделе спецификации S. Содержательно это как раз и означает, что программа вычисляет в точности то, что требуется согласно предполагаемой спецификации. Таким образом, множества специфицируемых решений и вычисляемых решений совпадают. [30]