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

Глава 2: Формы

В этой главе вы добавите форму в пустой проект, созданный в главе 1. Форма — это окно, на котором можно разместить такие компоненты, как кнопки, запускающие действия, поля редактирования, которые можно использовать для ввода текста, и полотна, на которых можно рисовать.

Рисунок 2.1 Добавление новой сущности к дереву проекта

Рисунок 2.2 Создание новой формы

2.1.Создание формы: folder/name

Для того чтобы создать форму выберите команду меню File/New in New Package (см. рис. 2.1). Выделите пункт Form на левой панели диалогового окна Create Project Item и

11

заполните его так, как показано на рисунке 2.2. Новая форма называется query. Так как вы выбрали пункт New in New Package, Visual Prolog создаст форму в пакете с таким же названием. После нажатия на кнопку Create диалогового окна Create Project Item, IDE

покажет вам прототип новой формы (см. рис. 2.3). Вы можете изменить размеры окна, сделав его немного больше прототипа. Для этого нужно щелкнуть мышью и, удерживая нижний правый угол, тянуть за него так же, как вы это делаете, когда изменяете размеры обычного окна.

Рисунок 2.3 Изменение размеров формы

2.2.Включение пункта меню: File/New

Когда вы запускали пустое приложение, то, скорее всего, заметили, что пункт меню File/New отключен. Для того чтобы включить его, нажмите на элемент TaskMenu.mnu

дерева проекта (см. рис. 2.4). Затем разверните дерево, которое появится в нижней части диалогового окна TaskMenu, и уберите галочку из поля Disabled, соответствующего пункту меню &New/tF7, как показано на рисунке 2.5.

Рисунок 2.4 Дерево проекта/меню задач

12

2.3. Добавление кода к элементу дерева проекта.

Эксперт кода

Для того чтобы добавить код к элементу File/New выделите элемент TaskWindow.win

дерева проекта правой кнопкой мыши, и перед вами откроется контекстное меню. Выберите его пункт Code Expert (см. рис 2.6). Следуя рисунку 2.7, нажмите на элемент, показанный ниже:

Наконец, нажмите кнопку Add (ориентируйтесь по рис. 2.7) или дважды щелкните в области id_file_new -> onFileNew.

Рисунок 2.5 Включение элемента меню задач

Рисунок 2.6 Переход в Code Expert

В результате откроется текстовый редактор, содержащий следующий фрагмент кода

13

clauses

onFileNew(_Source, _MenuTag).

Скомпилируйте программу, а затем измените этот фрагмент так1:

clauses

onFileNew(W, _MenuTag) :- X = query::new(W), X:show().

Снова скомпилируйте программу, выбрав команду Build/Build. Запустив программу, вы увидите, что когда вы выбираете пункт меню File/New, создается новая форма.

Рисунок 2.7 Dialog and Window Expert

2.4.Примеры

Пример этой главы показывает, как создать новую форму с помощью команды меню среды File/New…. и последующего заполнения диалогового окна Create Project Item.

1 Или проще (здесь и далее примечания редактора перевода):

clauses

onFileNew(W, _MenuTag) :- _ = query::display(W).

14

Рисунок 2.8 Появляющаяся форма

2.5. Немного о логике: Аристотелева силлогистика

Согласно Аристотелю, суждение состоит из двух терминов, субъекта и предиката, а также кванторов «каждый», «ни один», «некоторый», «не каждый». Слово субъект происходит от латинского переложения греческого выражения ύποχείμενον, который обозначает то (или того), о чем или о ком это суждение (предмет суждения). Предикат

выражает то, что именно говорит суждение об этом субъекте.

Португальский логик, врач и математик Педру Жулиан (Pedro Julião), также известный как Петр Испанский, внес значительный вклад во многие области знания, прежде чем был избран Папой Римским под именем Иоанна XXI. Например его считают отцом офтальмологии и профилактической медицины. Он также написал «Логический трактат» (Summulae Logicales), оказавший большое влияние. Ему приписывается изобретение следующих сокращений для логических кванторов:

Квантор

Тип суждения

Сокращение

Пример

a

Общеутвердительное

P a Q

Каждое P есть Q

e

Общеотрицательное

P e Q

Ни один P не есть Q

i

Частноутвердительное

P i Q

Некоторое P есть Q

o

Частноотрицательное

P o Q

Некоторое P не есть Q

Суждения делятся на контрарные, контрадикторные (противоречивые) и субконтрарные. Ниже приведены определения каждого из этих классов.

a.Суждения P и Q являются противоречивыми, если и только если:

I. P и Q не могут быть истинными одновременно, а также

15

II.либо P, либо Q истинно.

Например, типы a и o противоречивы; то же верно для e и i.

b. Суждения P и Q являются контрарными тогда и только тогда, когда:

I.P и Q не могут быть истинными одновременно, а также

II.P и Q могут быть одновременно ложными.

Например, типы a и e контрарны.

c. Суждения P и Q субконтрарны, тогда и только тогда, когда:

I.P и Q не могут быть одновременно ложными, а также

II. P и Q могут быть одновременно истинными

Например, типы i и o субконтрарны.

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

Пусть P — это предикат заключения (больший термин), а S — это субъект заключения (меньший термин). Аристотель называет эти термины крайними. Пусть также M обозначает термин, который является общим для посылок, но отсутствует в заключении; этот термин называется средним термином. Посылка, содержащая P, называется большей посылкой, а посылка, содержащая S — меньшей посылкой.

Пусть символ * обозначает любой из четырех кванторов 'a', 'e', 'i', 'o'. Тогда классификация силлогизмов может быть представлена с помощью следующих трех фигур1:

Первая фигура

Вторая фигура

Третья фигура

M * P

P * M

M * P

S * M

S * M

M * S

S * P

S * P

S * P

В результате замены звездочек кванторами получается набор суждений — {большая посылка, меньшая посылка, заключение-. Согласно Петру Испанскому, каждый отдельный набор вида {a, a, a}, {a, i, o}, … образует правило, или модус. Для того чтобы вычислить, сколько существует различных модусов, вспомним уроки комбинаторики.

Размещение — это такой способ расположения элементов, при котором порядок их следования имеет значение (как в списках). С другой стороны, сочетания — это группы

1Классификация фигур силлогизмов осуществляется в зависимости от местоположения среднего термина в посылках. Петр Испанский объединял четвертую фигуру с первой. Четвертая фигура имеет вид:

P M

M S

S P

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

16

элементов, в которых порядок следования этих элементов не является существенным (как в множествах — ред. пер.). Порядок кванторов в силлогизме имеет значение, поэтому мы имеем дело с размещениями. Мы должны разместить три элемента, выбрав их из четырех, при этом повторения не исключаются. Если мы выбираем p элементов из n-элементного множества, то общее количество размещений с повторениями находится следующим образом:

n n ... n n p

p

В нашем случае нужно выбрать три квантора из множества ,a, e, i, o-. Таким образом, существует 43=64 возможности для каждой фигуры, а так как мы имеем три фигуры, то это число возрастает до 1921.

2.5.1. Истинные силлогизмы

Не все силлогизмы представимы с точки зрения логики. Аристотель признавал четыре допустимых вида (т. е. правильных модуса) для первой и второй фигур и шесть видов для третьей. С другой стороны, современная логика признаёт четыре вида для каждой из трех фигур2.

Петр Испанский изобрел латинскую мнемонику для облегчения запоминания допустимых видов. В его схемах на вид указывают гласные. Например, имя BARBARA обозначает ,a, a, a} — правильный модус для первой фигуры. Специалисты в области классической латыни заметят, что эти названия основаны на средневековом произношении, в котором такое слово, как СÆSARE записывалось как CESARE и произносилось соответственно. Так или иначе, вот полный список правильных модусов:

Первая фигура

{a, a, a} – Barbara {e, a, e} – Celarent {a, i, i} – Darii

{e, i, o} – Ferio

Вторая фигура

{e, a, e} – Cesare {a, e, e} – Camestres {e, i, o} – Festino {a, o, o} – Baroco

Третья фигура

{o, a, o} – Bocardo {e, i, o} – Ferison {i, a, i} – Disamis {a, i, i} – Datisi

Согласно Льюису Кэрроллу [Lewis Carroll], Венн предложил диаграмму, с помощью которой можно проверить, является ли силлогизм истинным. Рисунок 2.9 иллюстрирует метод Венна для силлогизма Barbara.

Первая посылка силлогизма Barbara говорит, что все M есть P. Таким образом, затемняется часть M, не содержащаяся в P (см. слева на рисунке). Вторая посылка говорит, что все S есть M. Поэтому нужно затемнить часть S, находящуюся вне M (см. справа). Часть S, оставшаяся незатемненной, полностью лежит внутри P. Следовательно, можно заключить, что все S есть P.

1 В приведенной здесь первой фигуре существует две возможности для расположения термина M, поэтому всего возможностей — 256.

2 Из четырех схем правильных модусов, приведенных для первой фигуры, первые три не являются правильными для четвертой фигуры.

17

Рисунок 2.9 Силлогизм Barbara

M a P

S a M

S a P

Теперь рассмотрим силлогизм Darii, который говорит1:

M есть P

S есть M

S есть P

Символ здесь означает все, а символ — некоторое. Венн утверждает, что общая посылка должна быть отображена на диаграмме до частной посылки. Поэтому в левой части рисунка 2.10 мы затемнили часть M, которая находится вне P, как этого требует посылка M есть P.

Рисунок 2.10 Силлогизм Darii

Следующий шаг состоит в том, чтобы поместить символ в область, соответствующую посылке S есть M. Как видно по рисунку 2.10, символ попадает в область SPM. Заключение состоит в том, что некоторое S есть P.

Отец Алисы Лидделл старался дать ей очень хорошее образование. Когда он заметил, что сколько-нибудь хороших греко-английских словарей не существует, он и его друг Скотт сели и подготовили очень хороший словарь, который с удовольствием используют почти все студенты, изучающие греческий. Он также пригласил известного писателя Льюиса Кэрролла в качестве преподавателя логики для двух своих дочерей. Для того чтобы сделать занятия более интересными, Льюис Кэрролл написал для детей несколько книг: «Алиса в Стране чудес» (Alice in the Wonderland), «Алиса в Зазеркалье»

(Through the Looking Glass) и «Логическая игра» (Game of Logics). Ниже приведен пример из «Логической игры».

1 Описание силлогизма Darii (включая рис. 2.10) в переводе отличается от описания, приведенного в оригинале. В переводе для этого силлогизма используется первая фигура, а автор использует для него четвертую фигуру, что нам представляется ошибочным.

18

Никакие философы не тщеславны.

Некоторые нетщеславные люди не играют в карты.

Поэтому некоторые не играющие в карты — не философы1.

Следующее решение вышеприведённого силлогизма было любезно предоставлено мне лично г. Венном. Меньшая посылка говорит о том, что некоторые из элементов, составляющих myдолжны быть сохранены — отметим это крестиками. Большая посылка завляет, что все xm должны быть уничтожены, поэтому сотрём их. Тогда, так как некоторые из myдолжны остаться, ясно, что это должны быть myx. Таким образом, должны существовать myx, или, отбрасывая m, должны существовать yx. Говоря обычным языком, некоторые не играющие в карты — не философы.

1 Силлогизм относится к четвертой фигуре и принадлежит типу Fresison. На рисунке используются обозначения: X — философы, M — тщеславные люди, а Y — игроки в карты.

19

Глава 3: События мыши

В первых двух главах вы научились создавать приложение с формой, которая появляется, когда вы выбираете пункт меню File/New этого приложения.

3.1.Добавление кода к MouseDownListener

Нажмите на элемент query.frm в дереве проекта, для того чтобы опять открыть форму

query, как показано на рисунке 2.3, и откройте вкладку Events диалогового окна Properties. Перед вами откроется приведенный ниже список событий.

Дважды щёлкните по MouseDownListener и замените процедуру для onMouseDown/4 следующим кодом:

clauses

onMouseDown(S, Point, _ShiftControlAlt, _Button) :- W= S:getVPIWindow(), Point= pnt(X, Y), vpi::drawText(W, X, Y, "Hello, World!").

Постройте приложение и

запустите его. Выберите пункт File/New для создания новой

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

20

Соседние файлы в папке Курсовой проект ПРОЛОГ