モジュールを設けた意図は、述語とシンボルを1つのユニットにグループ分けすることにあります。述語とシンボルをモジュールに隠すことができます。
以下の例においては、revers/2とgenlist/2の両方の述語が、モジュールリストにローカルに定義されてはいますが、モジュール名で修飾してやることによって、外部からアクセスすることができます(すなわち、list:revers(...)、list:genlist(...))。list/1は、assertとretractによりダイナミックに修正可能なリストの集まりになるように準備されています。
?- module(list). ?- export( revers/2,genlist/2 ). ?- common( list/1 ).
?- module_body(list). ?- predicate( list/1 ). ?- hidden( revers/3 ).
revers(L,R) :- revers(L,R, ).
revers( ,R,R). revers( X L ,R0,R) :- revers(L,R0, X R ).
genlist( ,0). genlist( N T ,N) :- N1 is N-1, genlist(T,N1).
list(1).