Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на языке Пролог - Клоксин У., Меллиш К

..pdf
Скачиваний:
99
Добавлен:
24.05.2014
Размер:
15.84 Mб
Скачать

У.Клоксин, К.Меллиш

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

Книга английских специалистов, содержащая описание основ логического программирования и особенностей языка Пролог — базового языка ЭВМ пятого поколения. Области применения этого языка связаны с разработкой экспертных систем, интеллектуальных баз данных, обработкой естественного языка, разработкой компиляторов ЭВМ. Книга полезна для первого ознакомления с

языком Пролог.

 

Для программистов и пользователей ЭВМ.

 

ОГЛАВЛЕНИЕ

 

Предисловие редакторов перевода

9

Предисловие ко второму изданию

10

Предисловие к первому изданию

11

Глава 1. Введение

16

1.1. Факты

18

1.2. Вопросы

20

1.3. Переменные

22

1.4. Конъюнкции

25

1.5. Правила

31

1.6. Заключение и упражнения

38

Глава 2. Более детальное описание

39

2.1. Синтаксические правила

39

2.2. Литеры

46

2.3. Операторы

47

2.4. Равенство и установление соответствия

49

2.5. Арифметика

51

2.6. Общая схема согласования целевых утверждений

56

Глава 3. Использование структур данных

63

3.1. Структуры и деревья

63

3.2. Списки

65

3.3. Принадлежность элементов списку

69

3.4. Пример: преобразование предложений

74

3.5. Пример: упорядочение по алфавиту

78

3.6. Использование предиката «присоединить» и спецификация деталей

80

Глава 4. Возврат и отсечение

84

4.1. Порождение множественных решений

85

4.2. Отсечение

91

4.3. Общие случаи использования отсечения

96

4.4. Проблемы, связанные с использованием отсечения

109

Глава 5. Ввод и вывод

112

5.1. Ввод и вывод термов

114

5.2. Ввод и вывод литер

119

5.3. Ввод предложений

121

5.4. Чтение файлов и запись в файлы

123

5.5. Объявление операторов

127

Глава 6. Встроенные предикаты

130

6.1. Ввод новых утверждений

131

6.2. Выполнение и невыполнение целевого утверждения

133

-6.3. Классификация термов

134

6.4. Работа с утверждениями как с термами

136

6.5. Создание структур и работа с компонентами структур

140

6.6. Воздействие на процесс возврата

145

6.7. Формирование составных целевых утверждений

147

6.8. Равенство

151

6.9. Ввод и вывод данных

152

6.10. Обработка файлов

154

6.11. Вычисление арифметических выражений

155

6.12. Сравнение чисел

157

6.13. Наблюдение за выполнением программы на Прологе

158

Глава 7. Еще несколько примеров программ

160

7.1. Словарь в виде упорядоченного дерева

161

7.2. Поиск в лабиринте

164

7.3. Ханойские башни ~

168

7.4. Справочник комплектующих деталей

169

7.5. Обработка списков

171

7.6. Представление и обработка множеств

174

7.7. Сортировка

177

7.8. Использование базы данных: random, генатом, найтивсе

181

7.9. Поиск по графу

187

7.10. Просеивай Двойки. Просеивай Тройки

193

7.11. Символьное дифференцирование

194

7.12. Отображение структур и преобразование деревьев

196

7.13. Применение предикатов clause и retract

200

Глава 8. Отладка пролог-программ

205

8.1. Расположение текстов программ

206

8.2. Типичные ошибки

209

8.3. Модель трассировки

212

8.4. Трассировка и контрольные точки

219

8.5. Фиксация ошибок

230

Глава 9. Использование грамматических правил в Прологе

234

9.1. Проблема синтаксического анализа

234

9.2. Описание синтаксического анализа на языке Пролог

238

9.3. Запись грамматических правил в Прологе

244

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

247

9.5. Введение дополнительных условий

252

9.6. Заключение

255

Глава 10. Пролог и математическая логика

260

10.1. Краткое введение в исчисление предикатов

260

10.2. Приведение формул к стандартной форме

264

10.3. Форма записи дизъюнктов

 

271

10.4. Принцип резолюций и доказательство теорем

273

10.5. Хорновские дизъюнкты

 

277

10.6. Пролог

 

279

10.7. Пролог и логическое программирование

282

Глава 11. Программные проекты на Прологе

286

11.1. Простые проекты

 

286

11.2. Более сложные проекты

 

289

Приложение А. Ответы к некоторым упражнениям

294

Приложение В. Программа приведения формул исчисления предикатов к

299

стандартной форме

 

 

Приложение С. Различные версии языка Пролог

305

Приложение D. Пролог для ЭВМ DEC system10

309

Приложение Е. Микро-Пролог

 

319

Приложение F. Система МПролога

 

"324

Предметный указатель

 

335

Предметный указатель

 

Аксиомы 273

rules) 234, 244

 

Алгоритм Евклида (Euclid's

Граничные условия (boundary

 

algorithm) 194

conditions) 71

 

Альфа-бета алгоритм (alpha-beta

Дерево (tree) 63

 

algorithm) 288

— разбора (parse tree) 237

 

Анонимная переменная (anonimous

—- синтаксическое (syntax tree) 290

variable) 44

— упорядоченное (sorted tree) 162

Аргумент (argument) 19, 261

Деревьев преобразование

 

Атом (atom) 42

(transforming) 196

 

Атомарное высказывание (формула)

Дизъюнкт (clause) 269

 

(atomic proposition) 262

Дизъюнкция (целевых утверждений)

База данных (data base) 20

(disjunction) 148, 202

 

Ввод/вывод (input/output) 112 Ввод

Дисплей (display) 17

 

программ (consulting) 126, 131

Доказательство теорем (proving

 

Возврат (backtracking) 27, 56

theorems) 273

 

Возврата механизм (процесс)

Доказать целевое утверждение (prove

(backtracking) 56, 59

goal) 22, 56

 

Возвратный ход (backtracking) 176

Импликация (implication) 262

 

Вопрос (question) 17, 20, 279

Интерпретатор (interpretator) 201, 307

Высказывание (proposition) 260

Интерпретация (имен, предикатов,

Гипотезы (hypothese) 273

программ) interpretation 19, 32,

Глагол (verb) 235

201, 275, 307

 

Глагола группа (verb group) 234

Квантор общности (universal

 

Грамматика контекстно-свободная

quantifier) 263

 

(context free grammar) 234, 249

существования (existential quantifier)

Грамматические правила (grammar

263

 

Клавиатура (keyboard) 17 Ковальский (Kovalsky R.) 282 Колмерауэр A. (Kolmerauer A.) 261

Комментарий (comment) 36

Компилятор (compiler) 307, 314

Конкретизировать переменную

(instantiate) 23 Константа (constant) 41

Контрольные точки (spy points) 158, 219

Конъюнктивная нормальная форма

(conjunctive normal form) 267 Конъюнкция (conjunction) 25, 262

Линеаризация списка (flattening a list) 286

Литерал (literal) 265 Литеры (characters) 41, 46

непечатаемые (non-printing) 46

печатаемые (printing) 46

Логика более высокого порядка

(higher order logic) 284

Логика математическая (logic) 260 Логические связки (logical

connectives) 262

Логическое программирование logic programming 12, 260, 282

Маркер (place marker) 24

Множество (set) 174 МПролог 324 Микро-Пролог

319

Несовместность (множества дизъюнктов) (irconsistence) 275

Нетерминальный символ (nonterminal symbol) 255

Объект (object) 16 Оператор (operator) 47

инфиксный (infix) 48

постфиксный (postfix) 48

префиксный (prefix) 48

левоассоциативный (left associative) 49

правоассоциативный

(rightassociative) 49

Оператора позиция (position) 48, 127

приоритет (precedence class) 48, 127

ассоциативность (associability) 48, 127

Операторов объявление (declaring operators) 127

Определитель (determiner) 234

Отладка программ (program debugging) 158, 205 Отношение (relationship) 16

Отображение структур (mapping structures) 196

Отрицание (negation) 262

Отсечение (cut) 91 Передоказать (вновь согласовать

целевое

утверждение) (re-satisfy goal) 59 Переменная (variable) 22, 43

Переменной область действия (scope variable) 33

Побочные эффекты (side effects) 119, 130

Поиск вглубь (depth first search) 188, 190

Поиск вширь (breadth first search) 190

по графу (searching graphs) 187

по критерию первый — лучший

(best—first search) 191

Правила вывода (inference rules) 260, 273

продукций (production rules) 291 Правило (rule) 17, 31

— ловушка (catch-hall rule) 76 Предикат (predicate) 20, 262

Предикатов исчисление (predicat calculus) 260

Предикаты встроенные (built-in predicat) 51, 130

Предложение (sentence) 234, 238

Программирование

недетерминированное

(relational programming) 172, 179

Программирование логическое (logic

programming) 12, 260, 282,

Структур отображение (mapping

Процедура (procedure) 76, 206

structures) 196

Равенство (equality) 49 Резолюций

Структура (structure) 41, 44

принцип (resolution princple)

Структуры функтор (functor of

273

structure) 45

Резолюция входная линейная (linear

— компоненты (componentsof

input resolution) 279

structure) 45

Рекурсия (recursion) 63

Существительное (noun) 235

— левосторонняя (left recursion) 72

Сцепленные переменные (shared

Решето Эратосфена (sieve of

variables) 35, 51

Eratosphenes) 193

Текущий входной/выходной поток

Робинсон Дж. A. (Robinson J. A.) 273

(current input/output stream) 124

Семантика декларативная (declarative

Терм (term) 12, 41, 261

semantic) 282

— составной (compound term) 261

— процедурная (procedural semantic)

Терминальный символ (terminal

22

symbol)

Семантические характеристики

255 Трассировка программ (program

(semantic) 249

tracing)

Символьное дифференцирование

158

(symbolic

— управляемая (leashed tracing) 220

differentiation) 194

Трассировки модель (tracing model)

Синтаксис (syntax) 306

212

Синтаксический анализатор (parser)

Унификация (unification) 275

237

Управляемое событие (leashed event)

Синтаксического разбора задача

223

(parsing problem) 237

Утверждение (clause) 36, 279

Сколемизация (skolemising) 265

Файл (file) 124

Сколемовские константы (skolem

Факт (fact) 17, 18

constants) 265

— ловушка (catch hall fact) 76

Следствие (consequence) 273

Формула (formulae proposition) 262

Совокупность (collection) 269

Функтор (functor) 45

Согласовать вновь (re-satisfy goal) 59

Функциональный символ (function

— (с базой данных) целевое

symbol) 261

утверждение (satisfy goal) 24,

Хорнопский дизъюнкт (Horn clause)

25, 56

277

Соответствия установление

Цель (goal) 25, 279

(matching) 21, 49

Целевое утверждение (goal) 25, 279

Сопоставление (цели с

— — выполняется (goal sucseeds) 29,

утверждением) (matching) 21, 49

30

Список (list) 65

— — не выполняется (goal fails) 29,

Списка голова (head of list) 67

30

— хвост (tail of list) 67

— — не согласуется (с базой данных)

Стандартная форма (clausal form)

(goal fails) 26

264, 269

— — согласуется с базой данных

(goal

nonvar 135 nospy 159

is satisfied) 26

not 150

Целевой дизъюнкт (goal statement)

notrace 158

276

op 154

Цели предшественники (ansestors)

or 228

224

phrase 246

Цепочка доказательств (flow of

put 119, 153

satisfaction) 57, 59

read 118, 153

Частотный словарь (concordance)

reconsult 132

287

repeat 145

Эквивалентность (equivalence) 262

retract 139

abort 229

retry 227

arg 142

see 126, 154

ASCII 47

seeing 126, 155

asserta, assertz 139

seen 126, 155

atom 135

skip 153, 226

atomic 136

spy 158

break 229

tab 114, 154

call 149

tell 125, 155

clause A 138

telling 125, 155

consult 126, 131

told 125, 155

creep 226

trace 158

debugging 159

true 133

display 117, 154

var 134

fail 133, 228

write 114, 154

functor 141

= ..143

get 120, 153

! 92

get 20, 153

; 148

halt 229

, 148

integer 136

= 49, 52, 151, 157

is 55, 156

\ = 52, 151, 157

leap 226

= = 152

listing 137

\== 152

mod 48, 55, 156

+ — * 48, 55, 156

name 144 nl 114, 153

< > > = =< 52, 157

nodebug 152, 159