Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conspekt.doc
Скачиваний:
11
Добавлен:
31.08.2019
Размер:
1.39 Mб
Скачать

5.12 Операторная запись.

Сложные объекты Пролога образуются с помощью операторов и структур.

Операторы языка ПРОЛОГ вводятся с помощью специального предиката и позволяют образовывать сложные структуры из простых операторов. Сами по себе операторы ничего нового не делают, а только меняют форму записи.

NB:  в языке ПРОЛОГ с операторами никаких действий

 не связано!!!

Например, a * a + b * c- выполнено в операторной форме, соответствующей языку ПРОЛОГ, т.к. *,+, -встроенные операторы ПРОЛОГа.

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

Эту же запись Мы могли бы записать в обычной предикатной форме, используя знаки + и * в качестве имени предикатов.

НАПРИМЕР, +( *( a,a) , *( b,c))

арг.1 арг.2

Операторную форму записи можно применять не только для арифметических выражений.

Внутри ПРОЛОГа оба такие выражения представляются с.о:

+

/ \

* *

/ \ / \

a a b c

Операторы улучшают читаемость программы, т.к. часто бывает удобно использовать операторы не только для записи арифметических выражений, но и для предикатов типа:

брат(Джон,Мэри). <==> Джон брат Мэри.

В ПРОЛОГе используются следующие предикаты :

Определение операторов:

op(<приоритет>,<тип>,<имя>),

где

<приоритет>::= целое число.

(Чем меньше это число, тем выше приори-

тет. М.б. и отрицательные числа).

<тип>::= {1. инфиксный,

2. префиксный,

3. постфиксный (суффиксный) }

<тип>::=

{1. xfx, yfx, xfy

2. fx, fy

3. xf, yf } ,

где f - оператор,

x,y - аргументы.

Между x и y имеется различие. Для того, чтобы уяснить себе эти различия, введем понятие Приоритет аргумент, который находится в () или является простым оператором. 0 – высший приоритет. Приоритет сложного аргумента равен наименьшему приоритету оператора или функтора, входящего в этот аргумент.

-,600 - приоритет структуры 600

/ \

a,0 b,0 a,0 -значит, что а имеет приоритет 0

Приоритет аргумента x всегда выше , чем приоритет f. Приоритет y всегда >= приоритету x.( Число приоритета у "х" < числа приоритета у "f").

ПРИМЕР : Определим оператор

op ( 600 , yfx , _ ).

a_b_c - как трактовать эту запись ?

_,600 _

/ \ / \

_,600 c,0 или a _

/ \ / \

a b b c

(( a_b)_c) (a_(b_c))

Это получим, если yfx Если xfy

 

оп вып-ся слева-направо оп вып-ся справа налево

в некоторых версиях ПРОЛОГа

наз-ся "lr" наз-ся "rl"

В операторной форме записи м. записывать списки :

[ a, b, c ]

Если ввести оп "." то список будет представлен с.о.

.

/ \ Формы записи списка : a.b.c.[]

. c .( a,.( b,.(c,[])))

/ \

a b

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]