Читайте также:
|
|
Пример: 1) likes (mary, аpples) – факт,
2) likes (beth, X):– likes (mary, Х) – правило.
Введем цель:
likes (beth, аpples)? – любит ли Бет яблоки? X= аpples
совпали подцель
Цель сопоставляется с фактом 1 пословно: терм предиката цели likes совпадает с термом факта 1. Т.е. сопоставление начинается слева направо до тех пор, пока очередное сопоставление окажется неуспешным. beth не совпадает c mary и поэтому дальше уже не проверяется. Пролог ищет следующую точку входа и находит правило 2. Если факт совпадает с левой частью правила – головой, то он пытается выполнить часть правила справа (тело). likes и beth совпали у обоих, но apples и Х не сопоставимы. Однако Х – это переменная, следовательно, она может быть сопоставлена с любым значением. Т.е. Х присваивается значение apples. Это связывание используется до тех пор, пока либо не будет вычислена цель, либо нельзя будет выполнить никакого другого сопоставления с учетом этого связывания. Следовательно, предикат likes(beth, X) имеет значение likes(beth, apples). Теперь пытаемся выполнить условие if likes(mary, X) и проверяем факт likes(mary, apples) как подцель. Снова сначала просматривается база и находится факт likes(mary, apples). Так как тело совпало, то цель достигнута, и решение есть X=apples и является истиной. Как цели, так и правила могут быть связаны с помощью союзов и (,) и или(;).
Число аргументов в предикате называется арностью. Если в предикате нет аргументов, то арность равна нулю. Совпадение проверяется на имя аргумента (likes – пример), на число аргументов (арность), на тип аргументов, на совпадение значений (слева направо)
При сравнении аpples, Х происходит процесс связывания: Х=аpples, так как переменная может принимать любое значение. Из этого следует, что цель совпала с головой. При появлении подцели начинается проверка заново.
Ответ задачи: X=аpples.
В теле правила может быть несколько подцелей, подцели обрабатываются последовательно слева направо. Если одна из подцелей несопоставима, то и вся цель является неуспешной. Сопоставление и поиск решений выполняются внутренними унификационными процедурами. Они выполняют сопоставление целей и подцелей с фактами и головами правил, чтобы доказать эти цели или подцели, а также определяют, сгенерированы ли новые подцели правой части. При сопоставлении с правилами, где имеется переменные Х, переменные сначала не имеют значения, т.е. они не означены, не идентифицированы, свободные. Когда переменная сопоставляется с объектом (apples), она связывается. Внешние цели заставляют программу выдать все решения, удовлетворяющие цели, а внутренние цели заставляют программу остановиться после первого успешного сопоставления целей. Таким образом, переменная освобождается после неуспешного сопоставления или при успешном достижении цели, и ее значения не являются одновременными.
Для присваивания значения переменным используется оператор (=), который практикуется двояко: как присваивание или как сравнение в зависимости от того является ли значение объектов свободными или означенными.
Пример:
1) аpples=аpples – это сравнение. Равенство истинно, цель достигнута.
2) аpples=oranges – это тоже сравнение. Равенство ложно, цель недостигнута
3) X=аpples, если Х не означено, то это присвоение, в противном случае это сравнение.
Если оба значения известны, то трактуется как сравнение, даже если оба объекты являются переменными: х=у
Если известно одно значение, то оно присваивается второму, независимо от того где оно стоит: аpples=X.
Дата добавления: 2015-09-06; просмотров: 81 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пакет Turbo Prolog | | | Метод отсечения и отката (ОО). |