Algunas búsquedas particularmente complejas se pueden expresar en aptitude
usando objetivos explícitos. En una expresión normal
de búsqueda no hay ninguna manera de referirse al paquete o a la versión que
se revisa en el momento. Por ejemplo, suponga que desea realizar una
búsqueda de todo paquete P que depende de un
segundo paquete Q de manera que
Q recomienda
P. Obviamente, necesita comenzar con el término
. Pero el término introducido en
?depends(...)... necesita seleccionar paquetes idénticos a aquel
emparejado con . Cuando he descrito esta meta
traté con este tema dando los nombres de los paquetes, denominándolos
?dependsP y Q; términos con
objetivos explícitos harían exactamente lo mismo. [17]
Un objetivo explicito se introduce con el término ?for.
Funciona de la misma manera que patrón, pero
puede emplear la variable dentro de
patrón para referirse al paquete o versión con el
cual se empareja patrón. Puede usar
variable de dos maneras:
El término ?= coincidiría de manera exacta con el paquete o la versión
indicada por la variable dada. De manera específica, si el termino ?for
correspondiente se limita a una sola versión, ?= coincidiría o bien
con la versión (si ?= se ha limitado) o con el paquete completo; de
otra forma, coincide con cualquier versión del paquete.
Véase Ejemplo 2.2, “
Uso del término ?=.
” para ver un ejemplo de uso de
?=.
El término coincide con cualquier paquete
o versión si el valor de ?bind(variable,
patrón)variable coincide con
patrón.
Hay una forma abreviada para términos de tipo ?. La
expresión
se puede sustituir por
?bind(variable,
?término[(argumentos)])?.
variable:término(argumentos)
Véase Ejemplo 2.3, “Uso del término ?bind.” para un ejemplo de uso de
?bind.
[17]
El lector astuto habrá notado que, esencialmente, ésta es una manera de
nombrar de manera explicita la variable en los λ - términos
correspondientes al término. Generalmente, un término tiene la forma
“λ x, el nombre es igual a
(x, patrón)”;
dando lugar a que un objetivo explicito x sea
visible en el lenguaje de búsqueda.