[1-14] How do you write portable programs in Prolog?
The de-facto standard syntax for Prolog is known as the Edinburgh
standard. It is based on the syntax of DEC-10 Prolog, an early Prolog
implementation developed at the University of Edinburgh.
See question [1-1] for information on the draft ISO standard for
Prolog.
Unfortunately, not every Prolog implementation is Edinburgh compatible.
There also isn't any notion of read-conditionalization, like #+ and #-
*features* in Common Lisp.
One option is to use the C preprocessor on Prolog code before loading
it into Prolog. Or you could use term-expansion to roll your own
conditional compilation system. Term expanding a clause to []
effectively discards it.
Another possibility is to conditionalize the execution instead of the
compilation. The user would have to uncomment a line like one of the
following,
% this_is(quintus).
% this_is(sicstus).
and the code would have to test for the proper literal
a :- this_is(quintus), blah, blah, blah.
a :- this_is(sicstus), blah, blah, blah.
at a slight cost in efficiency. (If you first feed the program through
a general partial evaluator, you'll get an equivalent program without
the inefficiency. Partial evaluation is in some sense a more powerful
and semantically cleaner form of source preprocessing. Given
<head> :- <condition>, <rest of body>.
If <condition> is always false, we can safely drop the clause. If
<condition> is always true, we can drop it from any clauses that
include it.)
Another possibility is Richard O'Keefe's environment package for
Prolog. It was posted to comp.lang.prolog on 1-SEP-94; a copy can be
found in
ftp.cs.cmu.edu:/user/ai/lang/prolog/code/ext/env/env.pl
Go Back Up
Go To Previous
Go To Next