Некоторые особенно сложные поисковые запросы могут быть выражены в
aptitude с помощью ясных целей. В обычных поисковых
выражениях не существует способа указать пакет или версию пакета, которая
проверяется в текущий момент. Например, предположим, что вы хотите найти все
пакеты P, которые зависят от другого пакета
Q, причем такие пакеты, что
Q рекомендует
P. Очевидно, вам нужно начать с термина
. Но параметр этого термина в
?depends(...)... требует некоторым образом выбрать пакеты, идентичные
тому, которому соответствует . Описывая задачу
выше, я делал это, указывая имена пакетов, называя их
?dependsP и Q; термины с
явными целями делают то же самое. [17]
Явная цель вводится термином $Sfor;:
Это выражение ведет себя в точности так же как
шаблон, но в шаблоне
может использоваться переменная для того, чтобы
указывать на пакет или версию пакета, которой соответствует
шаблон. Вы можете использовать
переменную двумя способами:
Термин ?= в точности соответствует пакету или версии пакета,
обозначенным данной переменной. В частности, если соответствующий
?for-термин ограничен определённой версией, то ?= будет
соответствовать либо этой версии (если ?= ограничен), либо всему
пакету; в противном случае он будет соответствовать любой версии этого
пакета.
См. Пример 2.2, «
Использование термина ?=
» для примера того, как использовать
?=.
Термин соответствует пакету или версии
пакета, если значение ?bind(переменная,
шаблон)переменной соответствует
шаблоном.
Для терминов с ? доступно сокращение. Выражение
может быть заменено на
?bind(переменная,
?термин[(аргументы)])?.
переменная:термин(аргументы)
Пример использования ?bind см. в разделе Пример 2.3, «Использование термина ?bind».
[17]
Проницательные читатели заметят, что очень важно явно называть переменную в
λ-терминах, соответствующих данному термину. Типичный термин имел бы
форму «λ x
. name-equals(x,
шаблон)»; явная цель делает
x видимым в языке поиска.