library(addportray)

library(addportray) makes the use of portray/1 more convenient. In DEC-10 Prolog and C Prolog, a program could contain clauses like

     portray(X) :-
             should_be_handled_here(X),
             print_it_this_way
     

scattered through any number of files. In Quintus Prolog, this does not work, because each file will wipe out every other file's clauses for portray/1; in any case, a clause for portray/1 in a module will do nothing at all, because it is user:portray/1 that you must define. DEC-10 Prolog and C Prolog had a similar problem in that if you reconsulted a file containing such clauses, you lost all the other clauses for portray/1.

Now, in order to add a link to portray/1 clauses to your program, you can do the following:

     :- use_module(library(addportray)).
     
     local_portray(X) :-
             should_be_handled_here(X),
             print_it_this_way(X).
     
     :- add_portray(local_portray).
     

To cancel such a link, you can call

     :- del_portray(local_portray).
     

Note that if you use this package, you should not define portray/1 in any other way; otherwise, these links will be lost.

You can link to other user-defined predicates (such as term_expansion/2) this way too. Suppose the other predicate to be linked to is user:Pred/Arity. Then

     :- add_linking_clause(Link, Pred, Arity).
     

ensures that there is a clause

     Pred(X1,...,XArity) :- Link(X1,...,XArity).
     

in module user, where Link/Arity is called in the module from which add_linking_clause/3 is called, and

     :- del_linking_clause(Link, Pred, Arity).
     

ensures that there is no such clause. For example, you can add a case to term_expansion/2 by adding the following directive to a module:

     :- add_linking_clause(local_expander, term_expansion, 2).