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

Пролог с процедурной точки зрения.

Теперь, когда вы прочитали главы 3 и 4, и первые три части этой гла-

вы, вы достаточно хорошо понимаете основы программирования и использова-

ния Турбо Пролога. Запомните, что Пролог - это декларативный язык, то

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

компьютеру самому искать способ решения. Другие языки программирования,

такие как Паскаль, Бэйсик и Си - процедурные. Это означает, что вы должны

писать подпрограммы и функции, которые подробно объяснят компьютеру какие

шаги должны быть сделаны для решения задачи.

Сейчас мы собираемся оглянуться назад и рассмотреть некоторые мате-

риалы, которые вы изучили, но уже представив их с точки зрения процедур-

ного программирования.

Как представлять факты и правила в качестве процедур

Можно просто рассматривать правила Пролога как определения процедур.

Например правило:

любит(Билл,Что_то) :- любит(Синди,Что_то).

означает "Для того чтобы доказать, что Билл любит что-то необходимо дока-

зать, что Синди любит это."

Имея это в виду, вы можете посмотреть как предикаты типа

say_hello :- write("Привет"), nl.

и

greet :-

makewindow(1,2,2,"Приветствие",0,0,25,80),

write("Привет, земляне !"),

nl.

соответствуют подпрограммам и функциям в других языках программирования.

Вы можете рассматривать даже факты Пролога, как процедуры; например

факт

любит(билл,пастила).

означает

Для того чтобы доказать, что Билл любит пастилу, не нужно ничего де-

лать, и если аргументы Кто и Чего в вашем запросе любит(Кто,Чего) - сво-

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

ответственно.

Вы могли встречаться в других языках с некоторыми процедурами прог-

раммирования, такими как условное ветвление, булевы выражения, безуслов-

ные переходы и возвращение результата вычисления. В следующих разделах,

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

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

Использование правил для условного ветвления (case).

Одно из основных различий между правилами в Прологе и процедурами в

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

задавать множество альтернативных определений одной и той же процедуры.

Это видно по программе parent на странице 60. Человек может быть предком,

будучи отцом или будучи матерью, поэтому определение предка состоит из

двух правил.

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

зуете предложение case в Паскале, задавая множество альтернативных опре-

делений для каждого значения аргумента (или множества значений аргумен-

та). Пролог будет перебирать одно правило за другим пока он не найдет

правило, которое подходит, и затем выполнит действие, которое задается

правилом, как в программе CH05EX13.PRO

/* программа CH05EX13.PRO */

predicates

action(integer)

clauses

action(1) :-

write("Вы нажали 1").

action(2) :-

write("Вы нажали два").

action(3) :-

write("Набрано три").

action(X) :-

X<>1, X<>2, X<>3,

write("Я не знаю такого числа").

goal

write("Наберите число от 1 до 3"),

readreal(Choice), /* redreal(integer) вводит целое */

action(Choice). /* Choice имеет значение введенного

числа */

Если пользователь нажмет 1, 2 или 3 action будет вызвана с соответс-

твующим значением аргумента и будет вызвано одно из первых трех правил.

action(Choice). /* Choice имеет значение введенного

числа */

Если пользователь нажмет 1, 2 или 3 action будет вызвана с соответс-

твующим значением аргумента и будет вызвано одно из первых трех правил.

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