Скачиваний:
223
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Секция цели

До сих пор вы вводили цели в ответ на приглашение в диалоговом окне

"Goal:". Такие цели называются внешними, т.к. вы должны вводить их во

время работы программы. Использование внешних целей весьма удобно в слу-

чаях, когда вы хотите запускать свои программы из среды разработки Турбо

Пролога. Однако, если вы планируете получить автономную исполняемую прог-

рамму, то (при ее исполнении) вы, очевидно, не увидите приглашения

"Goal:".

В Турбо Прологе есть секция goal (цель), которую (если вы намеревае-

тесь скомпилировать свою программу в исполняемый файл) вам необходимо

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

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

и в ней же компилируются.

Особенно следует обратить внимание на то, что секция goal аналогична

телу правила: это просто список подцелей. Секция goal отличается от пра-

вила лишь следующим:

1. За ключевым словом "goal" не следует ":-" или "if".

2. При запуске программы Турбо Пролог автоматически выполняет цель.

Это происходит так, как будто Турбо Пролог вызывает goal, запуская

тем самым программу, которая пытается разрешить тело правила goal. Если

все подцели в секции goal истинны - программа завершается успешно. Если

же какая-то подцель из секции goal ложна, то считается, что программа

ложна. (Хотя чисто внешне никакой разницы в этих случаях нет - программа

просто завершит свою работу.)

Пример.

-------

/* Программа CH04EX02.PRO */

predicates

run(char)

goal

run(X).

clauses

run(X) :-

makewindow(1, 7, 7, "Hello Word Program", 0, 0, 25, 809),

write("Hello Word (first)"),

readchar(X),

removewindow.

run(X) :-

write("Hello Word (second)"),

readchar(X).

В этом примере Турбо Пролог создает окно и пишет в него "Hello word

(first)". Отметим, однако, что пишется только "Hello word (first)", тогда

как второе предложение предиката run никогда не выполнится. Когда исполь-

зуется внутренняя цель, Турбо Пролог ищет только одно (первое) решение.

И, кроме того, значение, которое связывается с X, не высвечивается.

Теперь удалим секцию goal и снова нажмем Alt-R. На этот раз вы уви-

дете в диалоговом окне приглашение

Goal:_

Теперь введите run(X). Турбо Пролог создаст окно и запишет в него

"Hello word (first)". Но, кроме этого, он найдет и второе решение и выве-

дет в диалоговое окно "Hello word (second)". И, наконец, Турбо Пролог

вернет два значения, с которыми был связан X.

Подробнее о декларациях и правилах

В Турбо Прологе есть несколько встроенных стандартных доменов, ос-

новные из которых показаны в Таблице 4.1. Использовать эти стандартные

домены вы можете при декларации типов аргументов предикатов. Т.к. стан-

дартные домены уже известны Турбо Прологу, - их описание в секции domains

не требуется.

Таблица 4.1 Основные стандартные домены

-----------------------------------------------------------------

Домен Описание

-----------------------------------------------------------------

char Символ, заключенный между двумя одиночными кавычками

(например: 'a').

integer Целое число от -32,768 до 32,767.

real Числа с необязательным знаком (+ или -), за которым

следует несколько цифр DDDDDDD, затем - необязательная

десятичная точка(.) и еще цифры DDDDDDD, за которыми -

необязательная экспоненциальная часть (e(+ или -)DDD):

<+|-> DDDDD <.> DDDDDDD <e<+|->DDD>

Примеры действительных (real) чисел:

42705 9999 86.72

9111.929437 521e238 79.83e+21

здесь 79.83e+21 означает 79.83*10^21 (аналогично

Фортрану, Бейсику и Паскалю).

Допустимый диапазон действительных чисел: от 1*10^-307

до 1*10^308 (от 1e-3 до 1e+3). При необходимости, целые

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

string Строка - любая последовательность символов, записанных

между парой символов удвоенных кавычек. Например: "книга

Марка".

Строки, которые вы пишете в программе, могут достигать

длины в 255 символов, в то время как строки, которые

система Турбо Пролога считывает из файла или строит

внутри себя, - могут достигать 64 К.

symbol Для идентификаторов (symbol) допускается два формата:

1. Последовательность букв, цифр и символов

подчеркивания, причем первый символ должен быть строчной

буквой;

2. Последовательность символов, заключенных в двойные

кавычки (это делается для случаев, когда идентификаторы

включают пробелы или не начинаются со строчной буквы).

Примеры идентификаторов.

telephone_number "railway ticket" "Dorid Inc"

Идентификаторы и строки взаимозаменяемы в вашей

программе, однако Турбо Пролог хранит их раздельно.

Идентификаторы хранятся в таблице поиска, а для

представления ваших объектов используются лишь их

адреса, а не сами идентификаторы. Это означает, что

сопоставление идентификаторов выполняется очень быстро,

а в случае, если они встречаются в программе несколько

раз, то и хранение их выполняется очень компактно.

Строки же не хранятся в поисковой таблице, и при

необходимости сопоставления Турбо Пролог проверяет их

символ за символом. Вы сами должны определять какой

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

-----------------------------------------------------------------

Турбо Пролог распознает несколько других стандартных доменов, однако

их мы объясним в других главах, после того как вы хорошо усвоите основ-

ные. Стандартные домены баз данных объясняются в главах 9 и 15, а другие

- в справочном руководстве.

В следующей таблице мы приводим несколько примеров простых объектов,

принадлежащих к основным стандартным доменам.

Таблица 4.2 Простые объекты.

-----------------------------------------------------------------

abc, caitlin, "animal lover", b_t_r_m (symbol)

-1, 3, 5, 0 (integer)

3.45, 0.01, -30.5, 123.4e+5 (real)

'a', 'b', 'c', '/', '&' (char)

"One two", "number 5", "&&", abc, turbo (string)

-----------------------------------------------------------------

Соседние файлы в папке Документация