logo
TurboProlog / Документация / TOM_1

Секция цели

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

"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.