Bersagli di ricerca espliciti

In aptitude è possibile esprimere alcune ricerche particolarmente complesse usando i bersagli espliciti. Nelle normali espressioni di ricerca, non c'è modo di fare riferimento al pacchetto o alla versione che viene testata in quel momento. Per esempio, supponendo che si desideri cercare tutti i pacchetti P che dipendono da un secondo pacchetto Q che a sua volta raccomanda P, ovviamente si deve iniziare con un termine ?depends(...). Il termine all'interno di ..., però, deve in qualche modo selezionare i pacchetti che sono identici a quelli che stanno venendo testati da ?depends. Quando più sopra si è descritto l'obiettivo desiderato, si è risolto questo problema dando un nome ai pacchetti, chiamandoli P e Q; i termini con bersagli espliciti fanno esattamente la stessa cosa.[17]

Un bersaglio esplicito viene introdotto dal termine ?for:

Figura 2.13. Sintassi del termine ?for

?for variabile: modello

Questo si comporta esattamente come modello, ma si può usare variabile all'interno di modello per riferirsi al pacchetto o alla versione la cui corrispondenza con modello sta venendo testata. Si può usare variabile in due modi:

  1. Il termine ?= trova corrispondenza esattamente con il pacchetto o la versione indicati dalla variabile data. Specificatamente: se il termine ?for corrispondente è limitato ad una particolare versione, allora ?= trova corrispondenza o con quella versione (se ?= è limitato) o con tutto il pacchetto; altrimenti trova corrispondenza con qualsiasi versione del pacchetto.

    Per un esempio su come usare ?=, vedere Esempio 2.2, « Uso del termine ?=. ».

  2. Il termine ?bind(variabile, modello) trova corrispondenza con qualsiasi pacchetto o versione se il valore di variabile fa corrispondenza con modello.

    Per termini in stile ?, è disponibile una forma abbreviata. L'espressione ?bind(variabile, ?termine[(argomenti)]) può essere sostituita da ?variabile:termine(argomenti).

    Per un esempio su come usare ?bind, vedere Esempio 2.3, «Uso del termine ?bind».



[17] I lettori attenti avranno notato che questo è essenzialmente un modo per indicare esplicitamente la variabile nei λ-termini corrispondenti al termine. Un termine tipico ha la forma «λ x . name-equals(x, modello)»; fornirgli un bersaglio esplicito rende x visibile nel linguaggio di ricerca.