print(Term) :-
    current_prolog_flag(print_write_options, Options), !,
    write_term(Term, Options).
print(Term) :-
    write_term(Term, [ portray(true),
                       numbervars(true),
                       quoted(true)
                     ]).
The print/1 
predicate is used primarily through the ~p escape sequence 
of format/2, 
which is commonly used in the recipies used by
print_message/2 
to emit messages.
The classical definition of this predicate is equivalent to the ISO 
predicate write_term/2 
using the options portray(true) and
numbervars(true). The portray(true) option 
allows the user to implement application-specific printing of terms 
printed during debugging to facilitate easy understanding of the output. 
See also
portray/1 
and library(portray_text). SWI-Prolog adds quoted(true) 
to (1) facilitate the copying/pasting of terms that are not affected by
portray/1 
and to (2) allow numbers, atoms and strings to be more easily 
distinguished, e.g., 42, '42' and "42".