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