Every predicate should have a one line comment documenting what it does, all module interfaces should be properly documented with a comment directive.
If an individual clause is long, it should be broken into sections, and each section should have a block comment describing what it does; blank lines should be used to show the separation into sections. Comments should precede the code to which they apply, rather than following it.
%
% This is a block comment; it applies to the code in the next
% section (up to the next blank line).
%
blah,
blah,
blahblah,
blah,
If a particular line or two needs explanation, a line comment
% This is a "line" comment;
% it applies to the next line or two
% of code
blahblah
blahblah % This is an "inline" comment
should be used.