slide1
Download
Skip this Video
Download Presentation
Логическое программировыание

Loading in 2 Seconds...

play fullscreen
1 / 21

Логическое программировыание - PowerPoint PPT Presentation


  • 120 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Логическое программировыание' - sawyer-herrera


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
Логическое программировыание

Презентация 6

Операторы в Прологе

slide2
Содержание
  • Определение оператора
    • Понятие структуры
    • Представление структур
    • Формат определения операторов
  • Встроенные операторы
    • Приоритеты, типы
    • Арифметические, логические операторы
  • Примеры определения новых операторов
  • Сопоставления
  • Общие выводы
slide3
Понятие структуры
  • в Прологе основной формой представления являются структуры.
  • Структура со­стоит из функтора (имени структуры) и набора компонент (составных частей структуры).
  • Число аргументов функтора называется арностью.
  • Для структур удобно использовать графическое представление в виде дерева, корнем дерева является функтор, а ветвями - компоненты.
  • Компоненты могут быть также переменными или структурами.

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

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

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

+

*

/

c

2

a

b

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

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

  • где:
    • Приоритет - задает относительный порядок выполнения оператора
    • Тип – показатель ассоциативности оператора и его позиции.
    • Функтор – символьное обозначение оператора
  • При необходимости программист может ввести свои операторы или переопреде­лить существующие.
slide6
Типы (ассоциативность) операторов
  • если оператор инфиксный, то указывается тип xfx, xfy(правоассоциативный) или yfx(левоассоциативный).
  • для постфиксного оператора указывается тип xfили yf
  • для префиксного - fxили fy.
  • fуказывает расположение функтора,
  • хуказывает на аргумент, чей приоритет должен быть строго выше оператора,
  • у обозначает аргумент с приоритетом выше или равным приоритету оператора.
slide7
Примеры ассоциативности
  • Левая ассоциативность:
  • оператор сложения + определен какop( 500, yfx, +).+ обладает левой ассоциативностью.A + B + C + D

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

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

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

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

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

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

slide8

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

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

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

Операторы с более низким приоритетом выполняются раньше остальных.

?- X is 3 + 2 * 8.

X = 19

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

Определив оператор «нравится» как:

:-op(600, xfx, likes)

можно записать факт того, что Мэри нравится кино

likes(mary, cinema).

в более естественном виде:

mary likes cinema.

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

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

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

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

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

+ - сложение

- - вычитание

* - умножение

/ - деление

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

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

^ - возведение в степень

  • Примеры:

f(X, Y, Z):-Z is X*X + Y*Y.

?- f(3,4,X).

X=25;

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

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

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

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

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

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

>= - отношение «больше либо равно»

  • Примеры:

?- 2+2=2*2.?- 2+2=:=2*2. ?- 5>=6.

No Yes No

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

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

slide16
Понятие сопоставления
  • Сопоставление (унификация) является наиболее важной операцией в Прологе. Оно выполняет сравнение двух термов на равенство, при этом неконкретизированные переменные получают значения, при которых термы становятся идентичными. Выполнение сопоставления может производиться либо явно, в теле пра­вила с помощью встроенного предиката X=Y, либо неявно, при сопоставлении цели с фактом или головой правила.
  • Сопоставление реализует основные операции обработки данных в логическом про­граммировании
    • однократное присваивание,
    • передача параметров,
    • создание структурных объектов,
    • доступ к полям структурных объектов с возможностью одновременного чтения/записи.
slide17
Правило выполнения сопоставлений
  • Сопоставление выполняется согласно следующим правилам
    • Неконкретизированная переменная сопоставима с любым объектом и этот объект становится значением переменной («конкретизацией»).
    • Если S переменная, а Т -произвольный объект, то ни сопоставимы и S приписывается значение T.
    • Наоборот, если Т -переменная, а S -произвольный объект, то T приписывается значение S: «T конкретизируется значением S».
  • Числа и атомы сопоставимы только с идентичными числами и атомами.
  • Сопоставление структур:
    • Структуры сопоставимы только, если они имеют одинаковый функтор одинаковое число компонентов, и соответствующие компоненты сопоставимы друг с другом.
    • Если S и Т - структуры, то они сопоставимы, если S и Т имеют одинаковый главный функтор и все их соответствующие компоненты сопоставимы. Результирующая конкретизация определяется сопоставлением компонент.
slide18
Примеры сопоставлений
  • Конкретизация переменных при сопоставлении.

?- data(M, D, 1992)=data(may, 3, Y).

M = may

D = 3

Y = 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 ;

slide19
Отрицательные сопоставления
  • Итак, в Прологе операцияX=Yкроме сравнения выполняет сопоставление двух термов, с конкретизацией переменных.
  • Также в Прологе существует противоположный предикат X\=Y, который истинен только в случае, если терм X не сопоставим с термом Y.
  • При использовании этого предиката в программе рекомендуется, чтобы все переменные в термах X и Y на момент согласования цели были конкретизированными, иначе результат будет зависеть от порядка целей в программе
  • Пример: зависимость результата от порядка конкретизации.

?- X=a, Y=b, X\=Y. ?- X=a, X\=Y,Y=b.

YesNo

slide20
Сопоставление выраженийна идентичность
  • Иногда требуется проверить точное равенство двух термов, включая соответствие расположения и идентичность неконкретизированных переменных. Это осуществляет­ся с помощью встроенного предиката равенства (идентичности) X==Y.
  • Этот предикат не выполняет конкретизации переменных, неконкретизированная переменная не равна никакому объекту кроме другой неконкретизированной переменной, уже сцепленной с ней.
  • Предикат равенства остается истинным, какое бы значение не получила в ходе дальнейшего вывода неконкретизированная переменная, входящая в терм.
  • Пример: Проверка двух термов на равенство, без конкретизации.

?- f(2,3)==f(2,X).

No

  • Противоположный предикат X\==Y истинен только в случае, если терм X не равен терму Y
  • Пример: Проверка двух термов на равенство, без конкретизации.

?- f(2,3)\==f(2,3).

No

slide21
Выводы

На основании изложенного можно сделать заключения:

  • Удобство программ для чтения часто можно повысить с помощью записи операторной форме.
  • Операции могут быть инфиксными, префиксными илипостфиксными.
  • Со знаками операций не связаны какие-либо операции над данными, если не считать некоторых частных случаев. Определения операций не определяют конкретные действия; они лишь вводят новые обозначения.
    • Знаки операций (функторы) применяются для соединения компонентов структур.
  • Программист может определять свои собственные операции.
  • В определении каждой операции необходимо указать:
    • приоритет (число в диапазоне от 1 до 1200),
    • тип (символьное представление отношения функтора и операндов),
    • знак (может состоять из одного или нескольких символов).
  • Для сравнения двух термов на равенство выполняется операция сопоставления, выполняющая конкретизацию их переменных.