<@
, predikáty reprezentující tyto operace
mají rozhraní:
kde![]()
![]()
<@
![]()
V následujících odstavcích bude uveden přehled nejdůležitějších predikátů používaných v dalších kapitolách, aby byly shromážděny na jednom místě a v průběhu dalšího textu nemuseli být samostatně vysvětlovány. Pro větší stručnost použijeme pseudokód.
První skupina je tvořena predikáty pro konverzi hodnot. Signatura těchto predikátů má obecně tvar:
S některými z těchto predikátů jsme se již setkali, jako třeba s2
![]()
tuple2List
. Patří sem také ascii2Atom
, lower2Upper
či univ2List
a mnoho dalších. V případech, které si to vyžadují,
jsou rovněž definovány i jejich symetrické varianty.
Pro jednorázové obecné transformace výsledků tj. situace, kdy
parser vydává jedinou derivaci, je
připraven predikát alter
. Zpravidla jej budeme používat pro
ukládání výsledků do struktur. Jeho první parametr se unifikuje s přicházejícím výsledkem parseru a v parametru druhém lze specifikovat
jeho transformovanou verzi. Predikátem alter
lze například vyjádřit
i dříve zmíněný tuple2List
:
Obvyklejší však bude spíše jeho použití při vytváření stromových datových struktur. Představme si situaci, kdy získáváme z parseru trojice obsahující v první položce kořen nového stromu, v druhé položce levý a v třetí pravý podstrom. Transformace výsledku i vytvoření uzlu je s pomocí predikátu![]()
<@
![]()
alter
snadné:
V kapitole![]()
<@
![]()
eval
. Předpokládá vstup ve formě
termu:
Provede vyhodnocení analogické použití standardního prologovského predikátu![]()
<@
![]()
is/2
.
Především pro ladící účely je připraven predikát show
a jeho
varianty showln
, showString
a další, jež vypisují
výsledek na standardní výstup. Predikáty zobrazují příchozí výsledek,
aniž by jej jakýmkoli způsobem modifikovali.
Zmíníme již pouze poslední dva predikáty. Prvním z nich je
který ignoruje přicházející výsledek a na výstup vydává hodnotu![]()
<@
![]()
Použití nacházejí především ve spojení s dalšími operacemi, ale i v jiných konstruktorech parserů -- všude tam, kde daný kombinátor či mutátor vyžaduje predikát pro zpracování hodnoty, ale my ji chceme v daném případě zachovat.![]()
<@
![]()
dvorka 2013-12-31