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