encode/3
pro překódování znakových sad:
kde je predikát, který provádí překódování. Definujme tedy klauzuli uživatelského módu:
encode(TermTable,Input,L):- item(Input+Li) -> (Li=[N>R] -> :-@[TermTable,R,RR], L=[encode(TermTable,N)>RR] ; L=[]).Použití uživatelského módu je naprosto stejné jako u módů knihovních:
?- encode(latin2Txt,s("třásně"))+L | :-> tokenA("trasne"). L= [encode(latin2Txt,s(""))>'trasne'] YesPři zavádění nového módu je zpravidla nutné nejprve doplnit proceduru primitiva
item
tak, aby bylo možné vybalovat argumenty
vnořené v selektoru nového módu. Jak jsme si ukázali v této části,
takovou úpravu je možno provést bez přímého zásahu do kódu knihovny.
Obvykle jsou však navíc doplněny o klauzule nového módu i procedury dalších
konstruktorů a zde se již bez zásahu do knihovních predikátů neobejdeme.
Pouhé použití uživatelského módu nemusí být vždy postačující.