K-Prolog Compiler Version 6.0 
:-mode p(+,'#'(+,?,?),-)は、p の第1引数および、第2引数の関数記号と、第2引数の第1引数が 呼び出し時に確定した値をもっており、第3引数が変数であることを指定しています。 この宣言により、インタプリタは、+または#に対応する引数をキーとして、 述語pの節を(実際にはハッシュ法により)検索します。
また、コンパイラは、
コンパイルコードの最適化
情報としてモード宣言があれば使用しますが、
publicされていないつまり、公的でない述語の場合、モードの自動推定も行なっていますので、
特に際だった指定を行なうことを意図している場合を除いてモード宣言は不要です。
モード宣言の引数として書けるものは、
+,-,'+'(D,D,...),'#'(D,D,...) D は、+,- または ?の形です。
[例]
p(x(a),f(x,X),X).
p(x(b),g(y,X),X).
p(y(b),h(y,X),X).
p(z(b),i(y,X),X).
p(z(c),k(y,X),X).
に対し、
:- mode p(+,?,?).
:- mode p('#'(+),'#'(+,?),?).
:- mode p('#'(?),'#'(?,?),?).
:- mode p(?,'#'(?,?),?).
はそれぞれ有効なモード宣言です。
インタプリタで動作させる場合、
モード宣言は、述語を呼び出していないときならば、いつでも変更できます。
また、モード宣言されている述語に対し、
asserta や assertzで
節を追加することや、
retractで節を削除することは
自由に行えます。
しかし、述語を呼び出している途中(たとえば、代替節が残っているとき)
にモード宣言を実行すると、その後の実行は保障されません。