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

Costas-Tyros_rus_MS

.pdf
Скачиваний:
18
Добавлен:
14.04.2015
Размер:
4.97 Mб
Скачать

Eduardo 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

Savoir­faire1

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

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