КАТЕГОРИИ: Архитектура-(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; Просмотров: 584; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |