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).