Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Акторный Пролог.pdf
Скачиваний:
37
Добавлен:
01.05.2014
Размер:
1.91 Mб
Скачать

АКТОРНЫЙ ПРОЛОГ

ОПРЕДЕЛЕНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ

версия от 23 января 2004 года

А. А. Морозов, Ю. В. Обухов

2

´

Акторный Пролог — объектно-ориентированный логический язык, предназначенный для программирования информационных систем, функционирующих в динамическом внешнем окружении (интеллектуальных агентов Интернет, систем интерактивного проектирования и др.).

Акторный Пролог воплощает новый подход к объединению логического и объектно-ориентированного программирования, обладающий следующими достоинствами:

В основе нашего подхода лежит использование классической логики (логики предикатов первого порядка).

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

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

Данная публикация является определением синтаксиса и семантики Акторного Пролога (версия от 23 января 2004 г.)

A. A. Morozov, Yu. V. Obukhov

Actor Prolog

Programming Language Definition

(version of January 23, 2004)

c

1996–2004

Алексей А. Морозов, Юрий В. Обухов

 

c

1996–2004

Институт Радиотехники и Электроники РАН

 

Оглавление

1

Алфавит языка

9

2

Лексика

11

 

2.1 Лексемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

2.1.1Переменные . . . . . . . . . . . . . . . . . . . . . . . . 12

2.1.2 Символы и ключевые слова . . . . . . . . . . . . . . 12

2.1.3Числовые литералы . . . . . . . . . . . . . . . . . . . 13

2.1.4

Сегменты строк . . . . . . . . . . . . . . . . . . . . .

15

2.1.5

Ограничители . . . . . . . . . . . . . . . . . . . . . .

16

2.2 Комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3 Определение данных

17

3.1Простые термы . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.2 Составные термы . . . . . . . . . . . . . . . . . . . . . . . . 19

3.2.1Структуры . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.2 Списки . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.3 Недоопределённые множества . . . . . . . . . . . . . 21

3.3Унификация термов . . . . . . . . . . . . . . . . . . . . . . . 24

4 Структура программы

27

4.1 Классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

4.1.1Атрибуты классов . . . . . . . . . . . . . . . . . . . . 28

 

4.1.2

Инициализаторы слотов . . . . . . . . . . . . . . . .

29

 

4.1.3

Конструкторы . . . . . . . . . . . . . . . . . . . . . .

30

4.2

Проект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

4.3

Пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

4.4

Трансляция исходных файлов . . . . . . . . . . . . . . . . .

33

3

4

Оглавление

5 Структура пространства поиска

37

5.1Экземпляры классов . . . . . . . . . . . . . . . . . . . . . . . 37

5.2Процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5.2.1Состояния процесса . . . . . . . . . . . . . . . . . . . 39

5.2.2Порты процессов . . . . . . . . . . . . . . . . . . . . . 42

5.3 Резиденты . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

5.4Построение пространства поиска . . . . . . . . . . . . . . . . 48

5.4.1Исполнение конструкторов . . . . . . . . . . . . . . . 49

5.4.2Построение слотов . . . . . . . . . . . . . . . . . . . . 50

6 Предложения классов

53

6.1 Атомарные формулы . . . . . . . . . . . . . . . . . . . . . .

54

6.1.1Простые атомы . . . . . . . . . . . . . . . . . . . . . . 54

6.1.2Бинарные отношения . . . . . . . . . . . . . . . . . . 56

6.1.3Объявления функций . . . . . . . . . . . . . . . . . . 56

6.2Подцели предложений . . . . . . . . . . . . . . . . . . . . . . 57

6.2.1 Вызовы функций . . . . . . . . . . . . . . . . . . . . 58

6.2.2Выражения . . . . . . . . . . . . . . . . . . . . . . . . 60

6.3Стратегия управления . . . . . . . . . . . . . . . . . . . . . . 61

6.3.1Исполнение вызова предиката . . . . . . . . . . . . . 61

6.3.2Исполнение предложения . . . . . . . . . . . . . . . . 64

6.3.3Механизм задержки исполнения . . . . . . . . . . . . 65

6.3.4Откат программы . . . . . . . . . . . . . . . . . . . . 66

7 Акторы и повторные доказательства

67

7.1Акторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

7.2Общие переменные . . . . . . . . . . . . . . . . . . . . . . . . 68

7.2.1 Построение общих переменных . . . . . . . . . . . .

70

7.3 Согласование акторов процесса . . . . . . . . . . . . . . . .

71

7.3.1Сопоставление локальных значений . . . . . . . . . . 71

7.3.2Исполнение повторных доказательств . . . . . . . . . 72

7.4Согласование процессов . . . . . . . . . . . . . . . . . . . . . 72

7.4.1Классификация сообщений . . . . . . . . . . . . . . . 73

7.4.2 Прямые сообщения . . . . . . . . . . . . . . . . . . . 74

7.4.3 Потоковые сообщения . . . . . . . . . . . . . . . . . . 76

7.5Исключительные ситуации . . . . . . . . . . . . . . . . . . . 81

Оглавление

5

8 Встроенные предикаты и операторы

83

8.1Корректное разрушающее присваивание . . . . . . . . . . . 85

8.2Актуализация производных значений . . . . . . . . . . . . . 86

A Сводка синтаксиса

89

A.1

Синтаксические правила языка . . . . . . . . . . . . . . . .

89

A.2

Дополнительные условия . . . . . . . . . . . . . . . . . . . .

94

A.3

Перекрёстные ссылки синтаксиса . . . . . . . . . . . . . . .

98

B Свойства, зависящие от реализации

107

C Термины и определения

109

D Список понятий языка

131

6

Оглавление

Введение

´

Акторный Пролог — объектно-ориентированный логический язык, предназначенный для программирования информационных систем, функционирующих в динамическом внешнем окружении (интеллектуальных агентов Интернет, систем интерактивного проектирования и др.).

ВАкторном Прологе информационная система представляется в виде теоремы на логическом языке, разделённой на «логические акторы» — повторно доказываемые подцели, взаимодействующие через общие переменные. Доказательство логических акторов (далее — просто «акторов») осуществляется в объектно-ориентированном пространстве поиска, топология которого соответствует структуре системы.

Акторный Пролог воплощает новый подход к объединению логического и объектно-ориентированного программирования, обладающий следующими достоинствами:

1.В основе нашего подхода лежит использование классической логики (логики предикатов первого порядка).

2.Центральной идеей и сущностью подхода является обнаружение и устранение логических противоречий, возникающих в процессе взаимодействия объектов.

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

ВАкторном Прологе внешние воздействия, вызывающие отклик информационной системы, интерпретируются как использование разрушающего присваивания, вызывающего повторное доказательство акторов логической программы. В частности, взаимодействие человека и машины рассматривается как доказательство некоторой теоремы, в котором одновременно при-

7

8

Оглавление

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

Стратегия управления Акторного Пролога — акторный механизм — является расширением стандартной стратегии управления языка Пролог (стратегии «поиска слева направо в глубину с возвратом»). В отличие от стандартной стратегии управления, акторный механизм допускает разрушающее присваивание значений общим переменным и при этом автоматически поддерживает корректность доказательства теоремы с помощью повторного доказательства отдельных акторов.

Все синтаксические конструкции Акторного Пролога, за исключением чётко очерченного набора (внелогических) управляющих операторов, имеют классическую декларативную (теоретико-модельную) семантику и могут быть однозначно представлены в виде формул логики предикатов первого порядка.

Различаются «минимальная», «быстрая» и «максимальная» версии языка. Минимальной и быстрой версиям соответствует упрощённый алгоритм унификации (без проверки вхождения). В быстрой и максимальной версиях гарантируется, что исполнение любого процесса не может привести к неопределённо длительной приостановке других процессов.

Для определения синтаксиса языка используется расширенная форма Бэкуса-Наура. Терминальные символы, когда это необходимо, выделяются с помощью кавычек и апострофов.

Настоящий раздел (введение), а также любые приложения, примеры, примечания и ссылки не являются составной частью определения языка.

Ссылки: актор 7.1, акторный механизм 7, доказательство актора 6.3.1, значение переменной 3.1, исполнение процесса 5.2, общие переменные 7.2, повторные доказательства 7.1, подцель доказательства 6.3.1, проверка вхождения 3.3, программа 4, процесс 5.2, разрушающее присваивание 8.1, унификация 3.3.

Глава 1

Алфавит языка

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

буква =

большая

 

буква | маленькая

 

буква

 

 

 

 

 

 

большая

 

 

буква =

 

 

 

|

 

 

 

|

 

|

 

 

 

 

|

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

 

“A”

|

 

 

 

 

“B”

|

“C”

“D”

“E”

 

“F”

“G”

“H”

|

 

 

 

 

 

“I”

|

“J”

|

“K”

|

“L”

|

 

“M”

|

“N”

|

“O”

|

 

 

 

 

“P”

|

“Q”

|

“R”

|

“S”

|

 

“T”

|

“U”

|

“V”

|

 

 

 

“W” | “X” | “Y” | “Z”

 

 

 

 

 

 

 

 

 

маленькая

 

 

буква =

|

 

 

 

|

 

|

 

 

 

 

|

 

|

 

 

 

 

 

 

 

 

 

 

 

“a”

|

 

 

 

 

“b”

|

“c”

“d”

“e”

 

 

“f”

“g”

“h”

|

 

 

 

 

 

“i”

|

 

“j”

|

“k”

|

“l”

|

 

“m”

|

“n”

|

“o”

|

 

 

 

 

“p”

|

“q”

|

“r”

|

“s”

|

 

 

“t”

|

“u”

|

“v”

|

 

 

 

 

“w”

|

“x”

|

“y”

|

“z”

 

 

 

 

 

 

 

 

 

цифра =

|

 

 

 

 

 

 

 

 

|

 

 

 

|

 

 

 

|

 

|

 

 

 

 

|

 

|

“0”

 

 

 

 

 

“1”

“2”

“3”

“4”

 

“5”

“6”

“7”

|

 

 

 

 

 

“8”

|

“9”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

буквы

 

 

и

 

цифры =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[ буквы

 

 

и

 

цифры [ “

 

” ] ] буква

 

или

 

цифра

 

 

 

 

 

 

 

 

буква

 

или

 

цифра =

буква | цифра

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

10

 

 

Глава 1. АЛФАВИТ ЯЗЫКА

К специальным символам относятся:

 

! " # ’ ( ) + , − . / : ; < = > ? [ \ ]

 

 

‘ { | }