Příklad:

Vytvoříme mód encode/3 pro překódování znakových sad:
$encode(+TermTable,+Input,-LOS)$
kde $TermTable$ 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']
Yes
Př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í.



dvorka 2013-12-31