Special case: When you create a module to host dict method calls, you don't list those in the "public list" section:
Here, just the predicate is listed:
:- module(point, [point_length/2]).
M.multiply(F) % Method ".multiply/1" on dict M
:= point{x:X, y:Y} % Returns a "point" dict
:- X is M.x*F, Y is M.y*F. % Body where dict M is accessible
M.len() % Method ".len/0" on dict M
:= Len % Returns a "Len" value (a number, actually)
:- Len is sqrt(M.x**2 + M.y**2), % Body where dict M is accessible
debug("pointlength_method","~q.len() = ~q",[M,Len]).
point_length(point{x:X,y:Y},Len) :-
Len is sqrt(X**2 + Y**2),
debug("pointlength_predicate","point{x:~q,y:~q} = ~q",[X,Y,Len]).