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ů ?depends
P
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ř vzor
u 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 vzor
em.
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
.