Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Предикат унификации




Арифметические предикаты

В Пролог-программе справедливы и используются все виды арифметических операций:

+ − сложение;

- − вычитание;

* − умножение;

/ − деление;

exp − возведение в степень.

Кроме этого имеются другие встроенные математические операции:

mod − модуль, остаток от целочисленного деления;

div − частное от деления;

sin − синус;

cos − косинус;

ln − натуральный логарифм.

 

Термин унификация [лат. unio − единство + facere − делать] − означает приведение чего-либо к единой норме, форме, единообразию. Унификация в программе на языке Пролог – это операция приведения к единому значению. Следует особо отметить, что предикат «=» не является оператором присваивания, хотя и может выполнять его функцию в частном случае.

Пример. Унификация, как присваивание значения

Программа вычисления факториала:

predicates

factorial (integer, real)

factorial (integer, real, integer, real)

goal

factorial (5, X),

write ("X = ", X).

clauses

factorial (Fact, N):- factorial (Fact, N, 1, 1).

factorial (Fact, N, Fact, N):-!.

factorial (Fact, N, P, I):-

NewP = P + 1, /* унификация */

NewI = NewP * I, /* унификация */

factorial (Fact, N, NewP, NewI).

Результат выполнения программы: X = 120.

 

Унификация в общем виде осуществляется следующим образом: сначала вычисляется выражение в правой части, которое затем унифицируется со значением в левой части.

 

Пример. Унификация выражения с переменной

Дано выражение: R = exp (X * ln (Y)).

predicates

power (integer, integer)

goal

readint (X),

readint (Y),

power (X, Y).

clauses

power (X, Y):-

R = exp (Y * ln (X)), /* операция унификации */

write(X, "^", Y, "=", R), nl.

 

Двухместный предикат «=» представлен в программе в инфиксной форме записи. Он проверяет, унифицируются ли друг с другом его аргументы. Если в одном из аргументов содержаться неконкретизированные переменные, то в случае успешной унификации они конкретизируются.

 

Пример. Унификация структуры

Дано выражение:

? студент (Петров, 4, 21) = студент (X, Y, Z),

где X= Петров, Y= 4, Z=21.

 

domains

summa = real

proizv = real

itog = real

predicates

summa_chisel (real, real, summa)

proizv_chisel (real, real, proizv)

itog_chisel (summa, proizv, itog)

goal

makewindow (1, 10, 2, "Сумма и произведение", 0, 0, 25, 80),

write ("Введите первое число:\n A = "),

readreal (A),

write ("Введите второе число:\n B = "),

readreal (B),

write ("Сумма:\n C = A + B = "),

summa_chisel (A, B, C), write (C),

write ("\nПроизведение:\n D = A * B= "),

proizv_chisel (A, B, D), write (D),

write ("\nИтог:\n E = C + D = "),

itog_chisel (C, D, E), write (E).

clauses

summa_chisel (A, B, C):- C = A + B. /* операция унификации */

proizv_chisel (A, B, D):- D = A * B. /* операция унификации */

itog_chisel (C, D, E):- E = C + D. /* операция унификации */

 

Одной из фаз процесса доказательства целевого утверждения является унификация его аргументов с аргументами утверждений базы знаний. Рассмотрим, как работает предикат унификации в том случае, когда аргументами цели являются списки [22].Введем понятие шаблона (образца) списка, как формы описания множества (семейства) списков, обладающих определенными свойствами. Например:· шаблон списка [ Х | Y ] описывает любой произвольный список, состоящий не менее чем из одного элемента; · шаблон [ Х1, Х2 | Y ] − список, состоящий не менее чем из двух элементов; · аналогично [ Х1, Х2, Х3 | Y ] − список, содержащий не менее трех элементов; а шаблон в виде переменной Z − любой список, в том числе и пустой. Шаблон может содержать как переменные, так и константы. Например, шаблон [b | Z ] задает любой список, первым элементом которого является элемент b.При унификации происходит сопоставление шаблонов. Если шаблоны целевого утверждения и утверждения базы знаний представляют списки с несовместимыми различными свойствами (разные классы списков), то унификация заканчивается неудачей. Так, например, нельзя сопоставить списки[ Х1, Х2 | Т ], [a], [ Х1, Х2, Х3 | Z ], [1, 2] и т.д.Если шаблоны не противоречат друг другу, то осуществляется конкретизация отдельных переменных шаблона, т.е. присвоение им значений соответствующих констант, или сцепление с соответствующими переменными другого шаблона. В результате оба шаблона должны стать идентичными и породить общее решение − новый шаблон. Примеры: шаблон [[ X, Y ] | Z ] задает список, начинающийся с подсписка из двух элементов; при сопоставлении его со списком [[a, b], c] унификация проходит успешно и переменные принимают следующие значения: Х =a, Y =b, Z =[c]. Шаблоны [ X, Y | Z ] и [[a, b] | T ] при сопоставлении дают общее решение − новый шаблон [[a, b], Y | Z ]; образец [[ X | Y ] | Z ] описывает любой список, начинающийся с подсписка, в котором есть, по крайней мере, один элемент − элемент Х. Он соответствует, например, таким спискам:[[a]] при X =a, Y =[ ], Z =[ ];[[a, b], c] при X =a, Y =[b], Z=[c].Если в процессе сопоставления и присвоения значений шаблоны не могут стать идентичными, то унификация заканчивается неудачей, как в следующем случае:['бал', Y, Y ] [ X, X, 'цех'],где сопоставление показывает, что элементы обоих списков должны быть одинаковы, однако 'бал' не равно 'цех' [22].

 




Поделиться с друзьями:


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


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



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




Генерация страницы за: 0.052 сек.