Quelques recherches particulièrement complexes avec aptitude peuvent être
exprimées en utilisant les cibles explicites. Dans
une expression de recherche normale, il n'y a pas de façon de se référer au
paquet ou à la version qui est en train d'être testé. Par exemple, supposons
que l'on cherche tous les paquets P qui dépendent
d'un second paquet Q, tel que
Q recommande
P. Clairement, l'expression de recherche doit
commencer par . Mais le terme à mettre
entre les parenthèses doit en quelque sorte sélectionner les paquets qui
sont identiques à ceux sélectionnés par ?depends(...). Dans
la description de l'objectif ci-dessus, cela a été fait en donnant
explicitement des noms ?dependsP et
Q aux paquets. Les termes avec des cibles
explicites font exactement la même chose.[17]
Une cible explicite est introduite par le terme ?for :
Cela se comporte exactement comme motif, mais la
variable peut être utilisée à l'intérieur du
motif pour faire référence au paquet ou à la
version que ce motif est en train de tester. Vous
pouvez utiliser la variable de deux manières :
Le terme ?= sélectionnera les paquets ou les versions indiquées par la
variable donnée. Précisément, si le terme ?for est limité à une version
précise, alors ?= sélectionnera soit cette version (si ?= est
limité) soit le paquet entier. Sinon, il sélectionnera toutes les versions
du paquet.
Consultez l'Exemple 2.2, «
Utilisation du terme ?=.
» pour un exemple
d'utilisation d'?=
Le terme fera correspondre tout paquet ou
version si la valeur de la ?bind(variable,
motif)variable est en
correspondance avec le motif.
Pour les termes de la forme ?, une forme courte est
disponible. L'expression
peut être remplacée par
?bind(variable,
?terme[(arguments)])?.
variable:terme[(arguments)])
Consultez l'Exemple 2.3, « Utilisation du terme ?bind. » pour un exemple
d'utilisation de .
?bind
[17]
Le lecteur astucieux aura remarqué qu'il s'agit essentiellement d'une façon
de nommer explicitement la variable avec les λ-termes correspondant
au terme. Un terme typique aurait la forme « λ
x . name-equals(x,
motif) ». Donner une cible explicite rend
x visible dans le langage de recherche.