Логическое программировыание
This presentation is the property of its rightful owner.
Sponsored Links
1 / 21

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


  • 92 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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

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


6179138

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

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

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


6179138

Содержание

  • Определение оператора

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

    • Представление структур

    • Формат определения операторов

  • Встроенные операторы

    • Приоритеты, типы

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

  • Примеры определения новых операторов

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

  • Общие выводы


6179138

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

  • в Прологе основной формой представления являются структуры.

  • Структура со­стоит из функтора (имени структуры) и набора компонент (составных частей структуры).

  • Число аргументов функтора называется арностью.

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

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

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


6179138

Древовидное представление выражений (структур)

  • Пример: запишем арифметическое выражение:

    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


6179138

Определение новых операторов в Прологе

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

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

  • где:

    • Приоритет - задает относительный порядок выполнения оператора

    • Тип – показатель ассоциативности оператора и его позиции.

    • Функтор – символьное обозначение оператора

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


6179138

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

  • если оператор инфиксный, то указывается тип xfx, xfy(правоассоциативный) или yfx(левоассоциативный).

  • для постфиксного оператора указывается тип xfили yf

  • для префиксного - fxили fy.

  • fуказывает расположение функтора,

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

  • у обозначает аргумент с приоритетом выше или равным приоритету оператора.


6179138

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

  • Левая ассоциативность:

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

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

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

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

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

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

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


6179138

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

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

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

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

?- X is 3 + 2 * 8.

X = 19


6179138

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

  • Пример оператора:

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

    :-op(600, xfx, likes)

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

    likes(mary, cinema).

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

    mary likes cinema.

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


6179138

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

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

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


6179138

Основные встроенные арифметические операторы

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

    +- сложение

    -- вычитание

    *- умножение

    /- деление

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

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

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

  • Примеры:

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

    ?- f(3,4,X).

    X=25;


6179138

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

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

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

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

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

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

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

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

  • Примеры:

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

    NoYes No


6179138

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

  • Пролог позволяет формировать сложные логические выражения. Простейшими логическими предикатами являются true (истина)

    и fail (ложь, неудача)

  • Согласование цели true всегда успешно. Согласование цели fail всегда неудачно.

  • Для конъюнкции целей используется предикат "," (X,Y), а для дизъюнкции - предикат ";" (X;Y)

    • Приоритет у оператора дизъюнкции ";" выше, чем у оператора конъюнкции ",", поэтому лишние скобки в логических выражениях часто можно опускать.

      ?- true;(fail,fail). ?- true;fail,fail.?-(true;fail),fail).

      Yes YesNo

  • Для отрицания используется предикат not(X).

    • Так как запятая служит как для конъюнкции целей, так и для разделения аргументов, требуются дополнительные скобки, если аргумент not не является элементарным выражением.

    • Например, нужно писать not((true,fail)). а не not(true,fail).


6179138

Примеры определения логических операторов

  • Пример 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 = 2Yes

  • Пример 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


6179138

Примеры определения логических операторов

  • Пример 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 ~В.


6179138

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

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

  • Сопоставление реализует основные операции обработки данных в логическом про­граммировании

    • однократное присваивание,

    • передача параметров,

    • создание структурных объектов,

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


6179138

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

  • Сопоставление выполняется согласно следующим правилам

    • Неконкретизированная переменная сопоставима с любым объектом и этот объект становится значением переменной («конкретизацией»).

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

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

  • Числа и атомы сопоставимы только с идентичными числами и атомами.

  • Сопоставление структур:

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

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


6179138

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

  • Конкретизация переменных при сопоставлении.

    ?- 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 ;


6179138

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

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

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

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

  • Пример: зависимость результата от порядка конкретизации.

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

    YesNo


6179138

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

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

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

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

  • Пример: Проверка двух термов на равенство, без конкретизации.

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

    No

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

  • Пример: Проверка двух термов на равенство, без конкретизации.

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

    No


6179138

Выводы

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

  • Удобство программ для чтения часто можно повысить с помощью записи операторной форме.

  • Операции могут быть инфиксными, префиксными илипостфиксными.

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

    • Знаки операций (функторы) применяются для соединения компонентов структур.

  • Программист может определять свои собственные операции.

  • В определении каждой операции необходимо указать:

    • приоритет (число в диапазоне от 1 до 1200),

    • тип (символьное представление отношения функтора и операндов),

    • знак (может состоять из одного или нескольких символов).

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


  • Login