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

Эквивалентность и унификация

Бинарный предикат = является встроенным. Цель =(X, Y) (или X = Y) удовлетворяется, если X можно унифицировать с Y. Правила унификации:

  • если X — несвязанная переменная, а Y — атом или структура (или связанная переменная), то X унифицируется с Y, путем связывая X с Y. Аналогично, если Y — несвязанная переменная, то…;

?- X = mary.

X = mary.

?- mary = X.

X = mary.

?- X = likes(john, mary).

X = likes(john, mary).

?- X = likes(john, _).

X = likes(john, _G538).

?- X = 10.

X = 10.

?- X = 10+20.

X = 10+20.

  • если как X, так и Y — несвязанные переменные, то X унифицируется с Y, путем связывания переменных друг с другом. Если одна переменная связана с другой и, если одна из них далее связывается с каким-либо термом, то с термом связывается и другая переменная;

?- X = Y.

X = Y.

  • атомы или числа унифицируются только сами с собой;

?- mary = mary.

true.

?- mary = john.

false.

?- X = mary, X = john.

false.

?- X = mary, Y = john, X = Y.

false.

?- X = Y, X = john, Y = mary.

false.

?- 10 = 10.

true.

?- 10 = 3 + 7.

false.

  • две структуры унифицируются друг с другом, если у них одинаковый функтор и одинаковое количество компонентов и если соответствующие компоненты этих структур этих структур унифицируются между собой.

?- likes(mary, john) = likes(mary, john).

true.

?- likes(mary, john) = likes(john, mary).

false.

?- likes(X, john) = likes(mary, john).

X = mary.

?- likes(X, john) = likes(mary, Y).

X = mary, Y = john.

?- likes(X, john) = likes(Y, Z).

X = Y, Z = john.

?- beliefs(X, Y) = beliefs(alice, likes(john, mary)).

X = alice, Y = likes(john, mary).

?- knows(jane, X) = knows(jane, beliefs(jane, X)).

X = beliefs(jane, X).

?- J = john, M = mary, A = alice, L = likes(J, M), B = beliefs(A, L).

J = john, M = mary, A = alice, L = likes(john, mary), B = beliefs(alice, likes(john, mary)).

?- X = knows(jane, X), X = knows(_, knows(_, knows(_, Y))).

X = Y, Y = knows(jane, Y).

?- 3 + 7 = 3 + 7.

true.

X = 3 + 7, Y + Z = X.

X = 3 + 7, Y = 3, Z = 7.

Арифметика

Для вычисления числового значения выражения используется предикат встроенный бинарный is. Выражение (заданное структурой) должно быть вторым аргументов, а его значение — первый. Второй аргумент не может быть несвязанной переменной. Примеры:

?- 10 is 3 + 7.

true.

?- X is 3 + 7.

X = 10.

?- 3 + 7 is X.

ERROR: is/2: Arguments are not sufficiently instantiated

?- Y = 3 + 7, X is Y.

Y = 3+7, X = 10.

Предикат is поддерживает основные математические операции и функции. Пример:

?- X is 20 * 7.

X = 140.

?- X is (10 * 7) - (5 * 6).

X = 40.

?- X is 20 / 7.

X = 2.857142857142857.

?- X is 20 // 7.

X = 2.

?- X is 20 mod 7.

X = 6.

?- X is sin(pi / 6).

X = 0.49999999999999994.

?- 1 is 2 * 0.5.

false.

?- 1.0 is 2 * 0.5.

true.

Для сравнения чисел можно использовать следующие встроенные бинарные предикаты =:= (равно), =\= (не равно), < (меньше), > (больше), =< (больше либо равно) и >= (меньше либо равно). Оба аргумента должны быть выражениями (и ни один из аргументов не должен быть несвязанной переменной). Примеры:

?- 7 + 3 =:= 2 + 8.

true.

?- 1 =:= 0.5 + 0.5.

true.

?- X = 10, Y = 5, X < 3 * Y.

X = 10,

Y = 5.

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