Costas-Tyros_rus_MS
.pdfEduardo Costa
Visual Prolog 7.1 for Tyros
Перевод с английского
Сафронов Марк a.k.a. {S} |
Release 2 |
21.04.2008 |
Revision 28 |
Предисловие
Эта книга началась как личная работа. Моим намерением было просто написать руководство по логическому программированию для моего сына. Успех книги, тем не менее, был безмерным, и я получил множество предложений по улучшению текста или кода, также как и пожеланий продол жать работу. Письма приходили из Саудовской Аравии, Китая, России, Испании, Франции, Бразилии, Канады и множества других мест. Я благодарен всем, кто проявил интерес к моей работе, особенно же мне хотелось бы поблагодарить следующих людей:
•Елена Ефимова (Elena Efimova), которая сделала много исправлений по тексту и по исто рическим сведениям о математике и логике.
•Марк Сафронов (Mark Safronov), который перевёл книгу на русский язык и сделал много исправлений по содержанию оригинала. Между прочим, русский перевод оформлен го раздо лучше оригинала.
•Томас У. де Боэр (Thomas W. de Boer), который подготовил параллельную редакцию кни ги, с более длинными объяснениями и текстом, подходящим для рядовых начинающих.
•Стюарт Камминг (Stuart Cumming). Я часто даю примеры, которые показывают то, чего следует избегать с точки зрения методики разработки программного обеспечения. Стю арт указал, что эти примеры могут только запутать читателя; он предложил, что мне сле дует акцентировать внимание на слабых местах реализации, если та не слишком здравая. Хотя я согласен со Стюартом, я подумал, что будет лучше полностью убрать негативные примеры.
•Роуз Шапиро (Rose Shapiro), которая исправила мой латинский и моё описание многих ис торических событий.
•Юрий Ильин (Yuri Ilyin), который помог мне своим опытом; без него эта книга не была бы написана.
2
Содержание
Предисловие ________________________________________________________________2
Содержание ________________________________________________________________3
Глава 1: Введение__________________________________________________________8
1.1.Создание проекта в Visual Prolog______________________________________________8
1.1.1.Создание нового GUI проекта: name. _______________________________________________ 8
1.1.2.Компиляция и запуск программы __________________________________________________ 9
1.2.Примеры __________________________________________________________________9
1.3.Представления о логике: Древние греки______________________________________10
Глава 2: Формы __________________________________________________________11
2.1.Создайте форму: folder/name _______________________________________________11
2.2.Включите панель задач: в частности, пункт File/New ____________________________12
2.3.В Эксперте Кода добавьте код к элементу дерева проекта ______________________12
2.4.Примеры _________________________________________________________________14
2.5.Представления о логике: Силлогистика Аристотеля_____________________________15
2.5.1.Допустимые силлогизмы ________________________________________________________ 16
Глава 3: События мыши___________________________________________________18
3.1.Добавим код к MouseDownListener___________________________________________18
3.2.onPaint ___________________________________________________________________19
3.3.Примеры _________________________________________________________________20
3.4.Представления о логике: Булева алгебра _____________________________________20
3.5.Аргументные формы_______________________________________________________21
Глава 4: Поменьше картинок ______________________________________________23
4.1.Панель задач______________________________________________________________23
4.2.Дерево проекта ___________________________________________________________23
4.2.1.Code Expert ____________________________________________________________________ 24
4.3.Создание элемента проекта_________________________________________________25
4.4.Создание нового класса: folder/name _________________________________________27
4.5.Содержимое строки ввода__________________________________________________27
4.6.Примеры _________________________________________________________________27
4.7.Представления о логике: Исчисление предикатов______________________________28
Глава 5: Предложения Хорна_______________________________________________29
5.1.Функции__________________________________________________________________29
5.2.Предикаты________________________________________________________________29
5.3.Решения__________________________________________________________________30
5.4.Множественные решения __________________________________________________32
5.4.1.Программа, использующая предикаты с множественными решениями _________________ 34
3
5.5.Логические связки. ________________________________________________________36
5.6.Импликация ______________________________________________________________36
5.7.Предложения Хорна._______________________________________________________36
5.8.Объявления_______________________________________________________________37
5.8.1.Объявления режимов детерминизма______________________________________________ 38
5.9.Предикаты рисования______________________________________________________39
5.10.GDI объект________________________________________________________________39
5.11.Примеры _________________________________________________________________42
5.12.Представления о логике: Смысл предложений Хорна. __________________________42
Глава 6: Консольные приложения___________________________________________43
6.1.Отсечение ________________________________________________________________43
6.2.Списки ___________________________________________________________________44
6.3.Схемы обработки списков __________________________________________________48
6.4.Операции со строками. _____________________________________________________50
6.4.1.Полезные предикаты для работы со строками ______________________________________ 54
6.5.Представления о логике: Грамматика для предикатов__________________________57
Глава 7: Грамматика _____________________________________________________59
7.1.Грамматический анализ ____________________________________________________59
7.2.Грамматический синтез ____________________________________________________60
7.3.Почему Пролог? ___________________________________________________________62
7.4.Примеры _________________________________________________________________62
7.5.Представления о логике: Натуральный вывод _________________________________63
Глава 8: Рисование________________________________________________________65
8.1.onPainting ________________________________________________________________65
8.2.Пользовательские элементы управления _____________________________________67
8.3.Представления о логике: Принцип резолюции_________________________________69
Глава 9: Типы данных _____________________________________________________71
9.1.Примитивные типы данных_________________________________________________71
9.2.Множества _______________________________________________________________72
9.3.Множества чисел__________________________________________________________72
9.4.Иррациональные числа ____________________________________________________75
9.5.Действительные числа _____________________________________________________75
9.6.Математика_______________________________________________________________76
9.7.Форматирование __________________________________________________________76
9.8.Домены __________________________________________________________________77
9.8.1.Списки________________________________________________________________________ 77
9.8.2.Функторы _____________________________________________________________________ 77
9.9.Представления о логике: Предложения Хорна_________________________________80
4
Глава 10: Как решать это в Прологе_______________________________________81
10.1.Утилиты __________________________________________________________________81
Глава 11: Факты ________________________________________________________95
11.1.Класс file _________________________________________________________________97
11.1.1.Чтение и вывод строки________________________________________________________ 97
11.2.Константы ________________________________________________________________97
Глава 12: Классы и объекты_______________________________________________99
12.1.Факты объектов __________________________________________________________100
Глава 13: Джузеппе Пеано _______________________________________________102
13.1.Черепашья графика_______________________________________________________102
13.2.Черепашьи состояния _____________________________________________________103
13.3.Рекурсия ________________________________________________________________105
13.4.Кривая Пеано ____________________________________________________________105
13.5.Latino Sine Flexione ________________________________________________________106
13.6.Цитаты из Key to Interlingua ________________________________________________107
13.7.Примеры ________________________________________________________________109
Глава 14: L системы ____________________________________________________111
14.1.Класс draw _______________________________________________________________111
14.2.Примеры ________________________________________________________________113
Глава 15: Игры _________________________________________________________114
15.1.Объектные факты ________________________________________________________118
Глава 16: Анимация _____________________________________________________120
16.1.dopaint __________________________________________________________________121
16.2.Управление таймером ____________________________________________________121
16.3.Как программа работает___________________________________________________121
Глава 17: Текстовый редактор___________________________________________123
17.1.Сохранение и загрузка файлов _____________________________________________124
Глава 18: Печать _______________________________________________________126
Глава 19: Формы с закладками и другие полезности________________________128
19.1.Знаменитые программы___________________________________________________128
Глава 20: Баги __________________________________________________________131
20.1.Ошибки типа_____________________________________________________________131
20.2.Не процедура внутри процедуры ___________________________________________132
20.3.Неопределённые условия. _________________________________________________133
20.4.Невозможно определить тип_______________________________________________134
20.5.Направление ввода вывода________________________________________________134
Глава 21: Менеджер баз данных __________________________________________136
5
21.1.Менеджер базы данных___________________________________________________136
21.2.Класс emails______________________________________________________________138
21.3.Менеджер баз данных ____________________________________________________140
Глава 22: Книги и статьи________________________________________________142
22.1.Грамматика______________________________________________________________142
22.2.Базы данных_____________________________________________________________142
22.3.Техники программирования _______________________________________________143
Глава 23: Поиск_________________________________________________________145
23.1.Состояния _______________________________________________________________145
23.2.Дерево поиска ___________________________________________________________145
23.3.Поиск в ширину __________________________________________________________147
23.4.Поиск в глубину __________________________________________________________150
23.5.Эвристический поиск______________________________________________________151
Глава 24: Нейросети ____________________________________________________155
24.1.Описание нейрона________________________________________________________159
24.2.Реализация многослойной сети_____________________________________________160
24.3.Запуск двуслойной нейросети ______________________________________________163
24.4.Историческая перспектива_________________________________________________164
Глава 25: Альфа бета обрезка ___________________________________________165
25.1.Генерирование хода ______________________________________________________165
Библиография_____________________________________________________________171
6
Часть I
Savoirfaire1
1 Французское выражение, эквивалентно англ. know how, или русскому, «ноу хау». – (Здесь и далее прим.
пер.)
7
Глава 1: Введение
1.1.Создание проекта в Visual Prolog
Давайте создадим пустой проект, к которому вы позже добавите функциональности. Среда, ко
торую вы будете использовать при разработки своих программ, называется IDE, это сокращение от Integrated Development Environment – интегрированная среда разработки. Когда вы заходите в IDE Vis
ual Prolog, вы попадаете в среду, подобную той, что показана на рис. 1.1; мы будем ссылаться на ме ню IDE как на «меню задач». Система окон и диалогов, которую вы создаёте для общения с потенци альными пользователями ваших программ называется Graphical User Interface – графический пользо вательский интерфейс, или, для краткости, GUI.
1.1.1. Создание нового GUI проекта:name.
Этот шаг довольно прост. Выберите команду Project/New из меню задач, как показано на рис. 1.1. Затем заполните диалоговое окно Project Settings как на рис. 1.2. Нажмите кнопку Create, и перед ва
ми появится окно дерева проекта (рис. 1.3).
Рисунок 1.1 Создание нового проекта
Рисунок 1.2 Настройки проекта
8
Рисунок 1.3 Дерево проекта
1.1.2. Компиляция и запуск программы
Для того чтобы откомпилировать программу, выберите команду Build/Build из меню задач, как показано на рис. 1.4. Для запуска программы выберите Build/Execute из панели задач, и на экране
появится окно, похожее на изображенное на рис. 1.5. Для того, чтобы выйти из программы, всё, что
от вас требуется – щёлкнуть по кнопке в виде X, которая находится в верхнем правом углу окна; если вам так хочется, выберите пункт File/Exit меню задач приложения.
Рисунок 1.4 Сборка проекта
Рисунок 1.5 Пустое приложение
1.2.Примеры
Примеры этой главы показывают, как запускать приложение, и находятся в папке plot1. В сле дующей главе вы добавите функциональности к проекту plot1, что означает: сделаете из него что нибудь полезное.
9
1.3. Представления о логике: Древние греки
Древние греки изобрели особый вид общества, который сильно отличался от чего бы то ни было, существовавшего до них. В других цивилизациях, политические или законодательные решения про водились в жизнь королём, небольшой группой аристократов или королевским наместником; эти люди могли записывать основания для своих решений; если они это делали, полученный кодекс ссылался на Бога или на героя из обычаев. Что до греков, то их законы и политические решения предлагались теми горожанами, которые добились места в суде или в законодательном собрании своими способностями, везением или жизненным опытом. Предложение выносилось на голосова
нии и вводилось в действие только если большинство голосовавших поддерживало его. Давайте по смотрим, как ситуацию описывал Перикл (Pericles).
Для нашего государственного устройства мы не взяли за образец никаких чужеземных установлений. Напротив, мы скорее сами являем пример другим, нежели в чемнибудь подражаем комулибо. И так как у нас городом управляет не горсть людей, а большинство народа, то наш государственный строй называют народоправством. В частных делах все пользуются одинаковыми правами по законам. Что же до дел государственных, то на почетные государственные должности выдвигают каждого по достоинству, поскольку он чемнибудь отличился, не в силу принадлежности к определенному сословию, но изза личной доблести. Бедность и темное происхождение или низкое общественное положение не мешают человеку занять почетную должность, если он способен оказать услугу государству.1
В подобном обществе, если кто то желал продвинуть свои интересы или же отстоять свою точку зрения, ему необходимо было убедить всех остальных в своей правоте, выиграть дебаты и диспуты. Таким образом, необходимость заставила греков изобрести логику. Конечно же, они разработали и иные методы победы в споре, помимо логики: искусство лгать, психология толпы, наука сокрытия заблуждений, витиеватая речь и лесть тоже присутствовали в арсенале греческих способов выигры вать дебаты. Тем не менее, эта книга будет сосредоточена на логике.
1 В оригинале автор приводит цитату из т. н. «Погребальной речи» Перикла, в переводе Ричарда Кроули
(Richard Crawley) (1874).
Здесь использован перевод из книги Льва Остермана«О, Солон! (История Афинской демократии)» (1990).
10