Логическое программировыание
DESCRIPTION
Логическое программировыание. Презентация 6 Операторы в Прологе. Содержание. Определение оператора Понятие структуры Представление структур Формат определения операторов Встроенные операторы Приоритеты, типы Арифметические, логические операторы Примеры определения новых операторов - PowerPoint PPT PresentationTRANSCRIPT
Ю У р Г У
МехМат
С П
Логическое программировыание
Презентация 6Операторы в Прологе
Ю У р Г У
МехМат
С ПСодержание
Определение оператора Понятие структуры Представление структур Формат определения операторов
Встроенные операторы Приоритеты, типы Арифметические, логические операторы
Примеры определения новых операторов Сопоставления Общие выводы
2
Ю У р Г У
МехМат
С ППонятие структуры
в Прологе основной формой представления являются структуры. Структура со стоит из функтора (имени структуры) и набора
компонент (составных частей структуры). Число аргументов функтора называется арностью. Для структур удобно использовать графическое представление в
виде дерева, корнем дерева является функтор, а ветвями - компоненты.
Компоненты могут быть также переменными или структурами.
3
(а) представление в виде дерева; (б) запись на Прологе.
Ю У р Г У
МехМат
С П
Древовидное представление выражений (структур) Пример: запишем арифметическое выражение:
2 * a + b / c ~ +(*(2,a), /(b,c)) % альтернативная запись
Вычисления в Прологе:?- A = 3, B=9, C=3, X is 2*A+B/C.
~
?- A = 3, B=9, C=3, X is +(*(2,A),/(B,C)).
A = 3
B = 9
C = 3
X = 9
4
+
* /
2 a b c
Ю У р Г У
МехМат
С П
Определение новых операторов в Прологе Пролог позволяет определить функторы как опе раторы с нужными
свойствами (приоритетом, позицией и ассоциативностью) и использовать привычную форму записи арифметических выражений и предикатов. Для этого используется команда:
:-ор(приоритет, тип, функтор).
где: Приоритет - задает относительный порядок выполнения оператора Тип – показатель ассоциативности оператора и его позиции. Функтор – символьное обозначение оператора
При необходимости программист может ввести свои операторы или переопреде лить существующие.
5
Ю У р Г У
МехМат
С П
Типы (ассоциативность) операторов
6
если оператор инфиксный, то указывается тип xfx, xfy (правоассоциативный) или yfx (левоассоциативный). для постфиксного оператора указывается тип xf или yf для префиксного - fx или fy. f указывает расположение функтора, х указывает на аргумент, чей приоритет должен быть строго выше оператора, у обозначает аргумент с приоритетом выше или равным приоритету оператора.
Ю У р Г У
МехМат
С ППримеры ассоциативности
Левая ассоциативность: оператор сложения + определен как
op( 500, yfx, +).+ обладает левой ассоциативностью.A + B + C + D
выполняется как:
+(+(+(A,B),C),D)
7
Правая ассоциативность:
Оператор коньюнкции целей определен:op( 1100, xfy, ,)., обладает правой ассоциативностью.A , B , C , D
выполняется как
,(A, ,(B, ,(C,D)))
Ю У р Г У
МехМат
С П
Типы и приоритеты встроенных операторов
8
Приоритет оператора должен быть в диапазоне от 1 до 1200, самый высокий при оритет - 1, самый низкий - 1200. Тип оператора определяет его позицию и ассоциа тивность.
Приоритет оператора должен быть в диапазоне от 1 до 1200, самый высокий приоритет - 1, самый низкий - 1200.
Операторы с более низким приоритетом выполняются раньше остальных.?- X is 3 + 2 * 8.
X = 19
Ю У р Г У
МехМат
С П
Пример определения нового оператора Пример оператора:
Определив оператор «нравится» как::-op(600, xfx, likes)
можно записать факт того, что Мэри нравится кино likes(mary, cinema).
в более естественном виде: mary likes cinema.
Т.о., введение новых операторов позволяет записывать правила, факты и т.п. в более привычном (естественном) виде, удобном для восприятия и интерпретации (например, в записи математических формул и теорем).
9
Ю У р Г У
МехМат
С П
Определения встроенных операторов
Множество заранее определенных операций:
:-ор(1200, xfx, [:-,-->]).:-op(1200, fx, [:-,?-]).:-op(1100, xfy, ';').:-ор(1050, xfy, ->).:-ор(1000, xfy, ',').:-ор(900, fy, [not, '\+']).:-op(700, xfx, [=, \=, ==, \==, =..]).:-op(700, xfx, [is, =:=, =\=, <, =<, >, >=, @<, @=<, @>, @>=]).:-op(500, yfx, [+, -]).:-op(400, yfx, [*, /, //, mod]).:-op(200, xfx, **).:-op(200, xfy, ^).:-op(200, fy, -).
10
Ю У р Г У
МехМат
С П
Основные встроенные арифметические операторы В Прологе выполняются следующие арифметические операции:
+ - сложение
- - вычитание
* - умножение
/ - деление
mod - остаток от целочисленного деления.
// - целочисленное деление
^ - возведение в степень Примеры:f(X, Y, Z):-Z is X*X + Y*Y.
?- f(3,4,X).
X=25;
11
Ю У р Г У
МехМат
С ПОперации сравнения
К операциям сравнения относятся следующие предикаты:
=:= - проверка на равенство
=\= - проверка на неравенство
> - отношение «больше»
< - отношение «меньше»
=< - отношение «меньше либо равно» (запомнить порядок!)
>= - отношение «больше либо равно» Примеры:?- 2+2=2*2. ?- 2+2=:=2*2. ?- 5>=6.
No Yes No
12
Ю У р Г У
МехМат
С ПЛогические выражения
Пролог позволяет формировать сложные логические выражения. Простейшими логическими предикатами являются true (истина) и fail (ложь, неудача)
Согласование цели true всегда успешно. Согласование цели fail всегда неудачно.
Для конъюнкции целей используется предикат "," (X,Y), а для дизъюнкции - предикат ";" (X;Y) Приоритет у оператора дизъюнкции ";" выше, чем у оператора конъюнкции ",", поэтому
лишние скобки в логических выражениях часто можно опускать.?- true;(fail,fail). ?- true;fail,fail. ?-(true;fail),fail).
Yes Yes No
Для отрицания используется предикат not(X). Так как запятая служит как для конъюнкции целей, так и для разделения аргументов,
требуются дополнительные скобки, если аргумент not не является элементарным выражением.
Например, нужно писать not((true,fail)). а не not(true,fail).
13
Ю У р Г У
МехМат
С П
Примеры определения логических операторов Пример 1: Конструкция "если А то В иначе С" на языке Пролог может быть
записана как (A,B;not(A),С) или (А,В;С), а конструкция "если А то В" - как (A,B,true)
?- 5>6,X=1;not(5>6),X=2. ?- 5>4,X=1,true.
?- 5>6,X=1;X=2. X = 1
X = 2 Yes
Пример 2: Зададим условные операторы и запишем с их помощью определение предиката «max»
:-op(1160, fx, if).
:-op(1150, xfx, then).
:-op(1155, xfx, else).
if A then B else C :- A, B; not(A), C.
max(X,Y,Z) :- if X>Y then Z is X else Z is Y.
?- max(1,2,X).
X = 2
14
Ю У р Г У
МехМат
С П
Примеры определения логических операторов Пример 3: Теорема эквивалентности / правило де-Моргана:
Условная запись: ~( A & B) <==> ~ A V ~B
«Отрицание конъюнкции эквивалентно дизъюнкции отрицаний» Можем запись правило в форме предиката на Прологе:equiv((not(A,B)), (not(A);not(B))).
Но удобней представить запись в более естественной матем. форме.
Подходящий набор операций для данного назначения: :-ор(800, xfx, <===>).
:-op(700, xfy, v).
:-op(600, xfy, &).
:-op(500, fy, ~). Теперь теорему де Моргана можно записать как следующий факт:~ ( А & В ) <===> ~А V ~В.
15
Ю У р Г У
МехМат
С ППонятие сопоставления
Сопоставление (унификация) является наиболее важной операцией в Прологе. Оно выполняет сравнение двух термов на равенство, при этом неконкретизированные переменные получают значения, при которых термы становятся идентичными. Выполнение сопоставления может производиться либо явно, в теле пра вила с помощью встроенного предиката X=Y, либо неявно, при сопоставлении цели с фактом или головой правила.
Сопоставление реализует основные операции обработки данных в логическом про граммировании однократное присваивание, передача параметров, создание структурных объектов, доступ к полям структурных объектов с возможностью одновременного
чтения/записи.
16
Ю У р Г У
МехМат
С П
Правило выполнения сопоставлений
Сопоставление выполняется согласно следующим правилам Неконкретизированная переменная сопоставима с любым объектом и этот объект
становится значением переменной («конкретизацией»). Если S переменная, а Т -произвольный объект, то ни сопоставимы и S приписывается
значение T. Наоборот, если Т -переменная, а S -произвольный объект, то T приписывается
значение S: «T конкретизируется значением S».
Числа и атомы сопоставимы только с идентичными числами и атомами. Сопоставление структур:
Структуры сопоставимы только, если они имеют одинаковый функтор одинаковое число компонентов, и соответствующие компоненты сопоставимы друг с другом.
Если S и Т - структуры, то они сопоставимы, если S и Т имеют одинаковый главный функтор и все их соответствующие компоненты сопоставимы. Результирующая конкретизация определяется сопоставлением компонент.
17
Ю У р Г У
МехМат
С ППримеры сопоставлений
Конкретизация переменных при сопоставлении.?- data(M, D, 1992)=data(may, 3, Y).M = mayD = 3Y = 1992;
Сопоставление идентичных атомов.?- bob=bob.
Сопоставление структур.?- 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)).
X = 2; Z = _G777; Y = 2; A = _G777 ;
18
Ю У р Г У
МехМат
С ПОтрицательные сопоставления
Итак, в Прологе операция X=Y кроме сравнения выполняет сопоставление двух термов, с конкретизацией переменных.
Также в Прологе существует противоположный предикат X\=Y, который истинен только в случае, если терм X не сопоставим с термом Y.
При использовании этого предиката в программе рекомендуется, чтобы все переменные в термах X и Y на момент согласования цели были конкретизированными, иначе результат будет зависеть от порядка целей в программе
Пример: зависимость результата от порядка конкретизации.?- X=a, Y=b, X\=Y. ?- X=a, X\=Y, Y=b. Yes No
19
Ю У р Г У
МехМат
С П
Сопоставление выраженийна идентичность
Иногда требуется проверить точное равенство двух термов, включая соответствие расположения и идентичность неконкретизированных переменных. Это осуществляет ся с помощью встроенного предиката равенства (идентичности) X==Y.
Этот предикат не выполняет конкретизации переменных, неконкретизированная переменная не равна никакому объекту кроме другой неконкретизированной переменной, уже сцепленной с ней.
Предикат равенства остается истинным, какое бы значение не получила в ходе дальнейшего вывода неконкретизированная переменная, входящая в терм.
Пример: Проверка двух термов на равенство, без конкретизации.?- f(2,3)==f(2,X).No
Противоположный предикат X\==Y истинен только в случае, если терм X не равен терму Y
Пример: Проверка двух термов на равенство, без конкретизации.?- f(2,3)\==f(2,3).No
20
Ю У р Г У
МехМат
С ПВыводыНа основании изложенного можно сделать заключения: Удобство программ для чтения часто можно повысить с помощью записи операторной
форме. Операции могут быть инфиксными, префиксными или постфиксными. Со знаками операций не связаны какие-либо операции над данными, если не считать
некоторых частных случаев. Определения операций не определяют конкретные действия; они лишь вводят новые обозначения. Знаки операций (функторы) применяются для соединения компонентов структур.
Программист может определять свои собственные операции. В определении каждой операции необходимо указать:
приоритет (число в диапазоне от 1 до 1200), тип (символьное представление отношения функтора и операндов), знак (может состоять из одного или нескольких символов).
Для сравнения двух термов на равенство выполняется операция сопоставления, выполняющая конкретизацию их переменных.
21