21
Ю У р Г У М ехМ ат С П Логическое программировыание Презентация 6 Операторы в Прологе

Логическое программировыание

Embed Size (px)

DESCRIPTION

Логическое программировыание. Презентация 6 Операторы в Прологе. Содержание. Определение оператора Понятие структуры Представление структур Формат определения операторов Встроенные операторы Приоритеты, типы Арифметические, логические операторы Примеры определения новых операторов - PowerPoint PPT Presentation

Citation preview

Page 1: Логическое программировыание

Ю У р Г У

МехМат

С П

Логическое программировыание

Презентация 6Операторы в Прологе

Page 2: Логическое программировыание

Ю У р Г У

МехМат

С ПСодержание

Определение оператора Понятие структуры Представление структур Формат определения операторов

Встроенные операторы Приоритеты, типы Арифметические, логические операторы

Примеры определения новых операторов Сопоставления Общие выводы

2

Page 3: Логическое программировыание

Ю У р Г У

МехМат

С ППонятие структуры

в Прологе основной формой представления являются структуры. Структура со стоит из функтора (имени структуры) и набора

компонент (составных частей структуры). Число аргументов функтора называется арностью. Для структур удобно использовать графическое представление в

виде дерева, корнем дерева является функтор, а ветвями - компоненты.

Компоненты могут быть также переменными или структурами.

3

(а)    представление в виде дерева;     (б)    запись на Прологе.

Page 4: Логическое программировыание

Ю У р Г У

МехМат

С П

Древовидное представление выражений (структур) Пример: запишем арифметическое выражение:

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

Page 5: Логическое программировыание

Ю У р Г У

МехМат

С П

Определение новых операторов в Прологе Пролог позволяет определить функторы как опе раторы с нужными

свойствами (приоритетом, позицией и ассоциативностью) и использовать привычную форму записи арифметических выражений и предикатов. Для этого используется команда:

:-ор(приоритет, тип, функтор).

где: Приоритет - задает относительный порядок выполнения оператора Тип – показатель ассоциативности оператора и его позиции. Функтор – символьное обозначение оператора

При необходимости программист может ввести свои операторы или переопреде лить существующие.

5

Page 6: Логическое программировыание

Ю У р Г У

МехМат

С П

Типы (ассоциативность) операторов

6

если оператор инфиксный, то указывается тип xfx, xfy (правоассоциативный) или yfx (левоассоциативный). для постфиксного оператора указывается тип xf или yf для префиксного - fx или fy. f указывает расположение функтора, х указывает на аргумент, чей приоритет должен быть строго выше оператора, у обозначает аргумент с приоритетом выше или равным приоритету оператора.

Page 7: Логическое программировыание

Ю У р Г У

МехМат

С ППримеры ассоциативности

Левая ассоциативность: оператор сложения + определен как

op( 500, yfx, +).+ обладает левой ассоциативностью.A + B + C + D

выполняется как:

+(+(+(A,B),C),D)

7

Правая ассоциативность:

Оператор коньюнкции целей определен:op( 1100, xfy, ,)., обладает правой ассоциативностью.A , B , C , D

выполняется как

,(A, ,(B, ,(C,D)))

Page 8: Логическое программировыание

Ю У р Г У

МехМат

С П

Типы и приоритеты встроенных операторов

8

Приоритет оператора должен быть в диапазоне от 1 до 1200, самый высокий при оритет - 1, самый низкий - 1200. Тип оператора определяет его позицию и ассоциа тивность.

Приоритет оператора должен быть в диапазоне от 1 до 1200, самый высокий приоритет - 1, самый низкий - 1200.

Операторы с более низким приоритетом выполняются раньше остальных.?- X is 3 + 2 * 8.

X = 19

Page 9: Логическое программировыание

Ю У р Г У

МехМат

С П

Пример определения нового оператора Пример оператора:

Определив оператор «нравится» как::-op(600, xfx, likes)

можно записать факт того, что Мэри нравится кино likes(mary, cinema).

в более естественном виде: mary likes cinema.

Т.о., введение новых операторов позволяет записывать правила, факты и т.п. в более привычном (естественном) виде, удобном для восприятия и интерпретации (например, в записи математических формул и теорем).

9

Page 10: Логическое программировыание

Ю У р Г У

МехМат

С П

Определения встроенных операторов

Множество заранее определенных операций:

:-ор(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

Page 11: Логическое программировыание

Ю У р Г У

МехМат

С П

Основные встроенные арифметические операторы В Прологе выполняются следующие арифметические операции:

+ - сложение

- - вычитание

* - умножение

/ - деление

mod - остаток от целочисленного деления.

// - целочисленное деление

^ - возведение в степень Примеры:f(X, Y, Z):-Z is X*X + Y*Y.

?- f(3,4,X).

X=25;

11

Page 12: Логическое программировыание

Ю У р Г У

МехМат

С ПОперации сравнения

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

=:= - проверка на равенство

=\= - проверка на неравенство

> - отношение «больше»

< - отношение «меньше»

=< - отношение «меньше либо равно» (запомнить порядок!)

>= - отношение «больше либо равно» Примеры:?- 2+2=2*2. ?- 2+2=:=2*2. ?- 5>=6.

No Yes No

12

Page 13: Логическое программировыание

Ю У р Г У

МехМат

С ПЛогические выражения

Пролог позволяет формировать сложные логические выражения. Простейшими логическими предикатами являются 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

Page 14: Логическое программировыание

Ю У р Г У

МехМат

С П

Примеры определения логических операторов Пример 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

Page 15: Логическое программировыание

Ю У р Г У

МехМат

С П

Примеры определения логических операторов Пример 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

Page 16: Логическое программировыание

Ю У р Г У

МехМат

С ППонятие сопоставления

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

Сопоставление реализует основные операции обработки данных в логическом про граммировании однократное присваивание, передача параметров, создание структурных объектов, доступ к полям структурных объектов с возможностью одновременного

чтения/записи.

16

Page 17: Логическое программировыание

Ю У р Г У

МехМат

С П

Правило выполнения сопоставлений

Сопоставление выполняется согласно следующим правилам Неконкретизированная переменная сопоставима с любым объектом и этот объект

становится значением переменной («конкретизацией»). Если S переменная, а Т -произвольный объект, то ни сопоставимы и S приписывается

значение T. Наоборот, если Т -переменная, а S -произвольный объект, то T приписывается

значение S: «T конкретизируется значением S».

Числа и атомы сопоставимы только с идентичными числами и атомами. Сопоставление структур:

Структуры сопоставимы только, если они имеют одинаковый функтор одинаковое число компонентов, и соответствующие компоненты сопоставимы друг с другом.

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

17

Page 18: Логическое программировыание

Ю У р Г У

МехМат

С ППримеры сопоставлений

Конкретизация переменных при сопоставлении.?- 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

Page 19: Логическое программировыание

Ю У р Г У

МехМат

С ПОтрицательные сопоставления

Итак, в Прологе операция X=Y кроме сравнения выполняет сопоставление двух термов, с конкретизацией переменных.

Также в Прологе существует противоположный предикат X\=Y, который истинен только в случае, если терм X не сопоставим с термом Y.

При использовании этого предиката в программе рекомендуется, чтобы все переменные в термах X и Y на момент согласования цели были конкретизированными, иначе результат будет зависеть от порядка целей в программе

Пример: зависимость результата от порядка конкретизации.?- X=a, Y=b, X\=Y. ?- X=a, X\=Y, Y=b. Yes No

19

Page 20: Логическое программировыание

Ю У р Г У

МехМат

С П

Сопоставление выраженийна идентичность

Иногда требуется проверить точное равенство двух термов, включая соответствие расположения и идентичность неконкретизированных переменных. Это осуществляет ся с помощью встроенного предиката равенства (идентичности) X==Y.

Этот предикат не выполняет конкретизации переменных, неконкретизированная переменная не равна никакому объекту кроме другой неконкретизированной переменной, уже сцепленной с ней.

Предикат равенства остается истинным, какое бы значение не получила в ходе дальнейшего вывода неконкретизированная переменная, входящая в терм.

Пример: Проверка двух термов на равенство, без конкретизации.?- f(2,3)==f(2,X).No

Противоположный предикат X\==Y истинен только в случае, если терм X не равен терму Y

Пример: Проверка двух термов на равенство, без конкретизации.?- f(2,3)\==f(2,3).No

20

Page 21: Логическое программировыание

Ю У р Г У

МехМат

С ПВыводыНа основании изложенного можно сделать заключения: Удобство программ для чтения часто можно повысить с помощью записи операторной

форме. Операции могут быть инфиксными, префиксными или постфиксными. Со знаками операций не связаны какие-либо операции над данными, если не считать

некоторых частных случаев. Определения операций не определяют конкретные действия; они лишь вводят новые обозначения. Знаки операций (функторы) применяются для соединения компонентов структур.

Программист может определять свои собственные операции. В определении каждой операции необходимо указать:

приоритет (число в диапазоне от 1 до 1200), тип (символьное представление отношения функтора и операндов), знак (может состоять из одного или нескольких символов).

Для сравнения двух термов на равенство выполняется операция сопоставления, выполняющая конкретизацию их переменных.

21