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

Анонимные переменные

Анонимные переменные позволяют вам упорядочить свои программы. Если

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

рования ненужных вам значений, вы можете использовать анонимные перемен-

ные. В Прологе анонимные переменные отображаются одиночными символами

подчеркивания ("_").

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

Загрузите программу CH03EX04.PRO и скомпилируйте ее в память.

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

predicates

male (symbol)

female (symbol)

parent (symbol, symbol)

clauses

male (bill).

male (joe).

female (sue).

female (tammy).

parent (bill, joe).

parent (sue, joe).

parent (joe, tammy).

Анонимная переменная может быть использована вместо любой другой пе-

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

примут какого-либо значения.

Например, в следующем вопросе вам нужно узнать какие люди являются

родителями (parent), но вам не нужно узнавать, кто у них дети. Пролог по-

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

ния, вам не требуется знать значение, присваиваемое переменной на данном

месте.

Goal: parent (Parent,_).

Получив такой запрос, Пролог ответит:

parent=bill

parent=sue

parent=sue

3 Solutions

Goal:_

В этом случае (из-за анонимных переменных) Пролог найдет и выдаст

троих родителей, но он не будет выдавать значений, ассоциированных со

вторым аргументом предложения parent.

Кроме этого, анонимные переменные могут быть использованы в фактах.

Следующие факты Пролога

owns(_, shoes).

eats(_).

могут быть использованы в следующих предложениях естественного языка:

У каждого есть (owns) ботинки (shoess).

Все едят (eats).

Анонимные переменные сопоставляются с чем угодно. В большинстве слу-

чаев проименованные переменные смогут работать абсолютно равнозначно, од-

нако, их значения не будут служить какой -либо полезной цели.

Цели (запросы)

До сих пор, при разговоре о ваших вопросах к Прологу мы использовали

слово "запросы". Отныне же, при ссылке на них, мы будем использовать бо-

лее общий термин: "цель". Это должно быть более удобно, ведь когда вы

запрашиваете Пролог, вы, в действительности, устанавливаете перед ним

цель: "Найти ответ на такой-то вопрос (если он есть):"...

Цели могут быть простыми, как следующие две:

likes (ellen, swimming).

likes (bill, What).

или немного более сложными. В разделе данной главы "Переменные" вы видели

цель, состоящую из двух частей:

likes (Person, reading) and likes (Person, swimming).

Цель, состоящая из двух и более частей, называется составной целью,

а каждая часть такой цели называется подцелью. (Замечание: в правилах

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

Часто вам нужно определить пересечение двух целей. Например, в пре-

дыдущем примере вы могли захотеть узнать, кто из людей является родителя-

ми-мужчинами. Вы можете указать Прологу найти решения этого запроса с по-

мощью задания составной цели. Загрузите программу CH03EX04.PRO и нажмите

(для ее запуска) AltR. На приглашение "Goal:" введите следующую составную

цель:

Goal: parent(Person,_) and male(Person).

Пролог попытается вначале решить подцель

parent(Person,_)

просматривая при этом для сопоставления предложения, а затем связывая пе-

ременную Person со значением, возвращаемым предложениями parent. Значе-

ние, возвращенное parent, будет теперь использовано в качестве значения

для решения второй подцели (явялется ли Person (уже связанная) мужчи-

ной?).

male (Person)

Если вы ввели цель корректно, Пролог ответит

Person=bill

Person=joe

2 Solutions

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