Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Сравнение неосновных термов





Рассмотрим задачу расширения программы явной унификации (программа 10.5) средством проверки на вхождение. Напомним, что проверка на вхождение является частью формального определения алгоритма унификации, которая препятствует унификации переменной с термом, содержащим эту переменную. Для того чтобы выразить это отношение на Прологе, нам потребуется проверка идентичности переменных (а не просто их унифицируемости, так как унифицируемы любые две переменные). Это – металогический тест.

Для этой проверки в Прологе имеется системный предикат ==/2. Цель (X = = Y)? выполнена, если Х и Y – идентичные константы, идентичные переменные или структуры с одним и тем же главным функтором и одинаковой арностью, а для соответствующих аргументов Xи Yструктур Х и Y соотношение X= =Yвыполняется рекурсивно. В противном случае цель (X = = Y) не выполнена. Например, цель (X = =5) не выполнена (в отличие от цели Х = 5).

Имеется также системный предикат, значение которого противоположно значению предиката = =. Цель Х \ = = Y? выполнена в тех случаях, когдаХ и Y неявляются идентичными термами.

Предикат \ = == может быть использован в определении отношения not_occurs_in( Sub, Term), истинного, если терм Sub не входит в терм Term. Данное отношение требуется для построения алгоритма унификации с проверкой на вхождение. Предикат not_occurs_in (Sub, Term) является металогическим предикатом, анализирующим структуру. Он используется в реализующей унификацию с проверкой на вхождение программе 10.6, варианте программы 10.5.

unify (Termi, Term2)¬

Term1 и Term2 унифицируемы с проверкой на вхождение.

unify (X,Y)¬

var(X), var(Y), X = Y.

unify (X,Y)¬

var(X), nonvar(Y), not_occurs_in(X,Y), X = Y.

umfy(X,Y)¬

var(Y), nonvar(X), not_occurs_in(X,Y), Y = X.

unify (X,Y)¬

nonvar(X), nonvar(Y), constant(X), constant(Y), X = Y.

unify (X,Y)¬

nonvar(X), nonvar(Y), compound(X), compound(Y),

term„unify(X,Y).

not_occurs_in(X,Y)¬

var(Y),X\= =Y.

not occurs in (X,Y)¬

nonvar(Y), constant (Y).



not_occurs_in(X,Y)¬

nonvar(Y), compound (Y), functor(Y,F,N),

not_occurs_in(N,X, Y).

not_occurs_in(N,X,Y)¬

N > 0, arg(N,Y,Arg), not_occurs_m(X,Arg), Nl: = N - 1,

not occurs in(N 1,X,Y).

not_occurs_in (0, X, Y)

.

term_unify(X,Y)¬ См. программу 10.5.

Программа 10.6. Алгоритм унификации с проверкойна вхождение.

 

Заметим, что при определении предиката not_occurs_in область определения не ограничена основными термами. Снять подобное ограничение в случае программы 9.2, задающей отношение Subterm, не так просто. Рассмотрим вопрос Subterm (Х,У)?. Он успешно решается программой 9.2 сопоставлением переменной Х терма У

Определим металогический предикат occurs_in (Sub. Term) обладающий требуемыми свойствами.

Наличие предиката = = позволяет использовать программу 9.2, задающую предикат Subterm как основу определения предиката occurs_in. Механизм возврата порождает все подтермы данного терма, и каждый подтерм проверяется на совпадение с переменной. Записью программы является программа 10.7(а).

 

occurs Jn (Suh, Term)¬

Sub является подтермом (возможно, неосновного) терма Term.

а: С использованием предиката = =

occurs_.in(X,Term) ¬

subterm (Sub, Term), X = = Sub.

в: С использованием предиката freeze

occurs_in(X,Term) ¬

freeze(X,Xf), freeze(Term, Termf),

subterm (Xf, Termi). subterm (X, Term)¬ См. программу 9.2.

Программа 10.7. Вхождение.

 

Исходное определение предиката Subterm корректно только для основных термов. Однако добавление типовых металогических тестов, подобных использованным при определении отношения no_occurs_in в программе 10,6, позволяет легко преодолеть это затруднение.





Дата добавления: 2014-01-07; Просмотров: 219; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



ПОИСК ПО САЙТУ:


Рекомендуемые страницы:

Читайте также:

  1. Глубокое клонирование и сравнение
  2. Двумерный описательный анализ связан с описанием формы и силы взаимосвязи между переменными, а так же со сравнением значений некоторой переменной в различных социальных группах.
  3. Клонирование и сравнение объектов
  4. Метод Черчмена Акоффа (последовательное сравнение).
  5. Минимальная форма представления функции алгебры это такая форма, которая содержит минимальное количество термов, которые имеют минимальные ранги.
  6. Оценка инвестиционной привлекательности проектов предполагает сравнение расходов и доходов по проекту с учетом фактора времени.
  7. Парное и множественное сравнение.
  8. Проверка статистической гипотезы. Сравнение двух генеральных средних
  9. Сравнение OLTP-систем и хранилищ данных
  10. Сравнение альтернатив и выбор решения
  11. Сравнение бесконечно малых функций
  12. Сравнение диаграммы последовательности и диаграммы кооперации

studopedia.su - Студопедия (2013 - 2021) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление
Генерация страницы за: 0.002 сек.