Expliciete zoekdoelen

Sommige bijzonder complexe zoekopdrachten kunnen in aptitude geformuleerd worden met behulp van expliciete doelen. In normale zoekexpressies bestaat er geen manier om te verwijzen naar het pakket of de versie die momenteel getoetst wordt. Bijvoorbeeld, veronderstel dat u wenst te zoeken naar alle pakketten P die van een tweede pakket Q afhangen op zo een manier dat Q P aanbeveelt. Het is duidelijk dat u op weg moet gaan met de term ?depends(...). Maar de term die in de plaats van de ... komt, moet op een of andere manier pakketten selecteren die identiek zijn aan dat waaraan ?depends getoetst wordt. Toen ik hierboven de bedoeling beschreef, loste ik dit op door de pakketten een naam te geven en ze P en Q te noemen. Termen met expliciete doelen doen exact hetzelfde. [17]

Een expliciet doel wordt met de term ?for ingevoerd:

Afbeelding 2.13. Syntaxis van de term ?for

?for variabele: patroon

Dit werkt exact gelijk patroon, maar variabele kan binnenin patroon gebruikt worden om te verwijzen naar het pakket of de versie waarmee patroon vergeleken wordt. U kunt variabele op twee manieren gebruiken:

  1. De term ?= zoekt een exacte overeenkomst met het in de opgegeven variabele vermelde pakket of versie. Specifiek: indien de overeenkomstige ?for-term zich tot een specifieke versie beperkt, dan zal ?= ofwel met die versie (als ?= beperkt werd) ofwel met het hele pakket een overeenkomst opleveren. Anders zal het een overeenkomst opleveren met om het even welke versie van het pakket.

    Zie Voorbeeld 2.2, “ Het gebruik van de term ?= voor een voorbeeld van het gebruik van ?=.

  2. De term ?bind(variabele, patroon) levert een overeenkomst op met gelijk welk pakket of versie als de waarde van variabele beantwoordt aan patroon.

    Voor termen in een ?-stijl is een verkorte vorm beschikbaar. De expressie ?bind(variabele, ?term[(argumenten)]) kan vervangen worden door ?variabele:term(argumenten).

    Zie Voorbeeld 2.3, “Het gebruik van de term ?bind voor een voorbeeld van het gebruik van ?bind.



[17] Scherpzinnige lezers zullen opmerken dat dit in essentie een manier is om expliciet de variabele in de λ-termen die aan de term beantwoordt, te benoemen. Een typische term zou de vorm hebben λ x . name-equals(x, patroon). Dit een expliciet doel geven, maakt x in de zoektaal zichtbaar.