Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ФЛП.doc
Скачиваний:
18
Добавлен:
27.05.2015
Размер:
632.83 Кб
Скачать

Лекция 2

1.2 Создание консольного приложения. Структура файла main.Pro.

Ограничимся рассмотрением консольных приложений. Этого будет достаточно для того, чтобы продемонстрировать основные принципы логического программирования. Создание и использование визуальных компонент принципиально не отличаются от такового в универсальных объектно-ориентированных языках программирования, таких как Visual C, C# и т. д. с некоторыми отличиями, вытекающими из особенностей логического программирования.

Для создания нового проекта необходимо выбрать пункт меню Project/New. В результате откроется диалоговое окно Project Settings, в котором имеется шесть следующих вкладок: General, Directories, Build Options, Version Information, File Templates и Run Options. При создании консольного проекта диалоговое окно Project Settings нужно заполнить таким образом:

General

Project Name: % указать имя проекта

Project Kind: (GUI application,

console application,

DLL) % указатьтипсоздаваемого проекта

BaseDirectory: % указать директорию, в которой хранятся проектыVP

Sub-Directory: % указать директорию, в которой будет сохранен данный проект

В результате будет создан шаблон для создания консольного приложения. Прежде чем что-либо в нем менять, нужно собрать приложение путем выбора команды меню Build/Build. После чего в представленном дереве проекта в перечне созданных файлов появится пункт main.pro. Путем двойного щелчка на этом пункте необходимо открыть этот файл для внесения соответствующих изменений, отвечающих сути поставленной задачи.

Запуск консольной программы осуществляется с помощью пункта меню Build/Run in Window.

Рассмотри структуру файла main.pro. Первое и предпоследнее выражения в файле имеют вид

implement main

end implement main

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

Раздел open.

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

Раздел constants.

Это ключевое слово используется для обозначения секции кода, которая определяет неоднократно используемые значения, применяемые в коде. Например, если строковый литерал "PDC Prolog" предполагается использовать в различных местах кода, тогда можно единожды определить мнемоническое (краткое, легко запоминаемое слово) для использования в таких местах:

constants

pdc="PDC Prolog".

Заметьте, что определение константы завершается точкой (.). В отличие от переменных Пролога константы должны начинаться со строчной буквы (нижний регистр).

Раздел domains.

В этом разделе задаются типы, которые не являются стандартными. К стандартным типам относятся типы: real, integer, char, string, symbol:

integer – целые числа;

real – вещественные числа;

char – одиночный символ, заключенный в двойные кавычки;

string – любая последовательность букв и цифр, заключенная в двойные кавычки;

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

Раздел class facts.

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

Раздел class predicates.

В этом разделе объявляются предикаты, т.е. имя предиката, типы его аргументов и их количество (арность). Для каждого из аргументов нужно указывать, является ли он входным или выходным. Входной аргумент, т.е. тот, с помощью которого предикат принимает данные, указывается с помощью символа i (input), а выходной, т.е. тот, через которые предикат возвращает вычисленное выражение, указывается с помощью символа o (output). Если для аргументов предиката не предполагается разграничение направлений входа-выхода, т.е. предполагается постановка запросов, в которых один и тот же аргумент может быть как входным так и выходным, то нужно использовать ключевое слово anyflow.

Для каждого из предикатов нужно указывать режимы детерминированности предиката, т.е. указывать, имеет ли он единственное решение или может иметь много решений.

Возможны следующие режимы:

determ

Выполнение детерминированного предиката может завершиться либо неудачно (fail), либо успешно (succeed) и при этом иметь одно решение.

procedure

Предикаты этого вида всегда завершаются успешно и имеют одно решение.

multi

Такой предикат не может завершиться неудачно, при этом он имеет множество решений.

nondeterm

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

Если предикат имеет много решений и одно из его решений не в состоянии удовлетворить другой предикат в той же конъюнкции, то Пролог осуществляет откат (backtrack) и предлагает другое решение в попытке удовлетворить эту конъюнкцию.

Примеры.

gr_father: (symbol, symbol) nondeterm anyflow.

factorial: (integer,integer) procedure(i,o).

Раздел clauses

Этот раздел состоит из правил. Правила записываются в формате:

H:- T1, T2, T3, …

и читаются таким образом: предикат H выполняется, если выполняются все из перечисленных условий T1, T2, T3 и т.д.

Раздел goal

В этом разделе формулируется вопрос и потому он называется разделом целей. Если цель расположена в тексте программы, то она называется внутренней, если в окне диалога, то внешней. Внешняя цель дает возможность получать все решения задачи, внутренняя – только первое.

Для удобства чтения программы в Прологе предусмотрены комментарии:

% – комментарий до конца строки;

/* текст, который не является программой */ – длинный комментарий.

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