Některá obzvláště komplikovaná hledání můžete v aptitude vyjádřit
pomocí explicitních cílů. Při běžných hledáních
nemáte možnost se odkazovat na verzi, kterou zrovna testujete.
Představme si situaci, kdy chcete najít všechny balíky
P, které závisí na balíku
Q takovém, že Q
doporučuje P.
Evidentně začnete s termem . Ovšem
term zapsaný místo ?depends(...)... potřebuje nějakým způsobem
vybrat balíky, které jsou právě porovnávány oproti
. V zadání úlohy jsme to vyřešili
použitím abstraktních jmen balíků ?dependsP a
Q; Termy s explicitními cíli pracují úplně
stejně.[14]
Explicitní cíl je uveden termem ?for:
Tato forma se chová stejně jako vzor, ale
navíc je možné se uvnitř vzoru pomocí
proměnné odkazovat na balík nebo verzi
balíku, vůči které se zrovna vzor
porovnává.
Proměnnou můžete použít dvěma způsoby:
Term ?= se shoduje s balíkem nebo verzí zadanou pomocí proměnné.
Konkrétně: pokud je odpovídající term ?for omezen na konkrétní
verzi, pak se bude také ?= shodovat pouze s touto verzí (nebo
celým balíkem). V opačném případě se bude ?= shodovat s
libovolnou verzí balíku.
Příklad použití termu ?= naleznete v příkladu
2.1 – „Použití termu ?=.“.
Term se bude shodovat s balíkem
nebo verzí, pokud se bude hodnota ?bind(proměnná,
vzor)proměnné
shodovat se vzorem.
Pro termy zapsané pomocí počátečního otazníku existuje zkrácená forma.
Výraz
lze přepsat jako
?bind(proměnná,
?term[(argumenty)])?.
proměnná:term(argumenty)
Příklad použití termu ?bind naleznete v příkladu
2.2 – „Použití termu ?bind“.
[14]
Všímaví studenti postřehli, že toto je v podstatě způsob explicitního
pojmenování proměnné v lambda výrazu příslušného termu. Typický term
má formu
„λ x . name-equals(x, vzor)“.
Použitím explicitního cíle se ve vyhledávacím jazyku zviditelní
proměnná x.