Некоторые особенно сложные поисковые запросы могут быть выражены в
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 видимым в языке поиска.