上で述べたモジュールは、特別なコンパイラ指令を使用してPrologのソースファイルの中で定義されます。つまり、
?- directive(.....).
という形をした節が、後でコンパイルされたファイルをロードするときではなく、コンパイル時に解釈されます。
典型的なモジュールの定義は以下のようになります。
?- module(foo).
?- export( bar/1 ).
?- module_body(foo).
bar(X) :- bar2(X,X).
bar2(bar,2).
モジュールの指令は、この直後から定義が始まるモジュールの名前を示します。モジュールの名前は、大域的名前空間commonのアトムでなければなりません。したがって、モジュールの名前は修飾しないようにします。指令moduleおよびmodule_bodyは、モジュールのヘッドの区切りとして働きます。モジュールのヘッドは、モジュールが外界とどのようなインタフェースを持っているかを指定します。モジュールのボディは、モジュールを実際に実装するための定義をする部分です。つまりモジュールが有する述語を定義します。