Явные цели поиска

Некоторые особенно сложные поисковые запросы могут быть выражены в aptitude с помощью ясных целей. В обычных поисковых выражениях не существует способа указать пакет или версию пакета, которая проверяется в текущий момент. Например, предположим, что вы хотите найти все пакеты P, которые зависят от другого пакета Q, причем такие пакеты, что Q рекомендует P. Очевидно, вам нужно начать с термина ?depends(...). Но параметр этого термина в ... требует некоторым образом выбрать пакеты, идентичные тому, которому соответствует ?depends. Описывая задачу выше, я делал это, указывая имена пакетов, называя их P и Q; термины с явными целями делают то же самое. [17]

Явная цель вводится термином $Sfor;:

Рисунок 2.13. Синтаксис термина ?for

?for переменная: шаблон

Это выражение ведет себя в точности так же как шаблон, но в шаблоне может использоваться переменная для того, чтобы указывать на пакет или версию пакета, которой соответствует шаблон. Вы можете использовать переменную двумя способами:

  1. Термин ?= в точности соответствует пакету или версии пакета, обозначенным данной переменной. В частности, если соответствующий ?for-термин ограничен определённой версией, то ?= будет соответствовать либо этой версии (если ?= ограничен), либо всему пакету; в противном случае он будет соответствовать любой версии этого пакета.

    См. Пример 2.2, « Использование термина ?= » для примера того, как использовать ?=.

  2. Термин ?bind(переменная, шаблон) соответствует пакету или версии пакета, если значение переменной соответствует шаблоном.

    Для терминов с ? доступно сокращение. Выражение ?bind(переменная, ?термин[(аргументы)]) может быть заменено на ?переменная:термин(аргументы).

    Пример использования ?bind см. в разделе Пример 2.3, «Использование термина ?bind».



[17] Проницательные читатели заметят, что очень важно явно называть переменную в λ-терминах, соответствующих данному термину. Типичный термин имел бы форму «λ x . name-equals(x, шаблон)»; явная цель делает x видимым в языке поиска.