Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Логическое программирование.docx
Скачиваний:
11
Добавлен:
16.11.2019
Размер:
62.21 Кб
Скачать

2. Сопоставление

Сопоставление (унификация) является наиболее важной операцией в Прологе. Оно выполняет сравнение двух термов на равенство, при этом некон­кретизированные переменные получают значения, при которых термы становятся идентичными. Выполнение сопоставления может производиться либо явно, в теле пра­вила с помощью встроенного предиката X=Y, либо неявно, при сопоставлении цели с фактом или головой правила. Сопоставление реализует основные операции обработки данных в логическом про­граммировании

  • однократное присваивание,

  • передача параметров,

  • создание структурных объектов,

  • доступ к полям структурных объектов с возможностью одновременного чте­ния/записи.

Сопоставление выполняется согласно следующим правилам

  • Неконкретизированная переменная сопоставима с любым объектом и этот объект становится значением переменной (конкретизацией). Если S переменная, а Т -произвольный объект, то ни сопоставимы и S приписывается значение T. Наоборот, если Т -переменная, а S -произвольный объект, то T приписывается значение S. Говорят,что T конкретизируется значением S.

Пример. Конкретизация переменных при сопоставлении. ?- data(M, D, 1992)=data(may, 3, Y). M = may D = 3 Y = 1992 ;

  • Числа и атомы сопоставимы только с идентичными числами и атомами.

Пример. Сопоставление идентичных атомов. ?- bob=bob.

  • Структуры сопоставимы только, если они имеют одинаковый функтор одинаковое число компонентов, и соответствующие компоненты сопоставимы друг с другом. Если S и Т - структуры, то они сопоставимы, если S и Т имеют одинаковый главный функтор и все их соответствующие компоненты сопоставимы. Результирующая конкретизация определяется сопоставлением компонент.

Пример. Сопоставление структур. ?- triangle(point(2, 5), A, point(B, 8)) = triangle(X, point(2, 8), point(5, 8)). A = point(2, 8) B = 5 X = point(2, 5) ;

  • Неконкретизированные переменные сопоставимы друг с другом, при этом они ста­ новятся сцепленными. Если одна из них получит конкретное значение, то такое же значение получит и другая переменная

Пример. Сопоставление двух стуктур, содержащих неконкретизированные перемненные. ?- triangle(point(X, 5), point(X, 8), point(5, Z))=triangle(point(2, 5), point(Y, 8), point(5, A)). Если Y представляет собой неконкретизированную переменную, а переменная X конкретизированную, то X и Y согласуются и Y принимает значение Х т.е. X=2, Y=2. Переменные Z и A обе не конкретизированы. Они согласуются и становятся сцепленными. Если две переменные сцеплены, то при конкретизации одной из них, второй переменной автоматически будет присвоено тоже самое конкретное значение, что и первой. Как это было с X и Y. Итак, в Прологе операция = кроме сравнения выполняет сопоставление двух термов, с конкретизацией переменных.Также в Прологе существует противоположный предикат X\=Y, который истинен только в случае, если терм X не сопоставим с термом Y. При использовании этого предиката в программе рекомендуется, чтобы все переменные в термах X и Y на мо­мент согласования цели были конкретизированными, иначе результат будет зависеть от порядка целей в программе ?- X=a, Y=b, X\=Y. Yes ?- X=a, X\=Y,Y=b. No Иногда требуется проверить точное равенство двух термов, включая соответствие расположения и идентичность неконкретизированных переменных. Это осуществляет­ся с помощью встроенного предиката равенства (идентичности) X==Y. Этот предикат не выполняет конкретизации переменных, неконкретизированная переменная не равна никакому объекту кроме другой неконкретизированной переменной, уже сцепленной с ней. Предикат равенства остается истинным, какое бы значение не получила в ходе дальнейшего вывода неконкретизированная переменная, входящая в терм. Пример. Проверка двух термов на равенство, без конкретизации. ?- f(2, 3)==f(2, X). No Противоположный предикат X\==Y истинен только в случае, если терм X не равен терму Y ^

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]