Explicitní cíle

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 ?depends(...). Ovšem term zapsaný místo ... potřebuje nějakým způsobem vybrat balíky, které jsou právě porovnávány oproti ?depends. V zadání úlohy jsme to vyřešili použitím abstraktních jmen balíků P a Q; Termy s explicitními cíli pracují úplně stejně.[14]

Explicitní cíl je uveden termem ?for:

Obrázek 2.11. Syntaxe termu ?for

?for proměnná: vzor

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:

  1. 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 ?=.“.

  2. Term ?bind(proměnná, vzor) se bude shodovat s balíkem nebo verzí, pokud se bude hodnota proměnné shodovat se vzorem.

    Pro termy zapsané pomocí počátečního otazníku existuje zkrácená forma. Výraz ?bind(proměnná, ?term[(argumenty)]) lze přepsat jako ?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.