Cibles de recherche explicites

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 ?depends(...). 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 P 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 :

Figure 2.13. Syntaxe pour le terme ?for

?for variable: motif

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 :

  1. 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'?=

  2. Le terme ?bind(variable, motif) fera correspondre tout paquet ou version si la valeur de la variable est en correspondance avec le motif.

    Pour les termes de la forme ?, une forme courte est disponible. L'expression ?bind(variable, ?terme[(arguments)]) peut être remplacée par ?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.