2.10.2.1 Using PrologScript
A Prolog source file can be used directly as a Unix program using the
Unix #! magic start. The same mechanism is useful for
specifying additional parameters for running a Prolog file on Windows.
The Unix
#! magic is allowed because if the first letter of a Prolog
file is #, the first line is treated as a comment.10The #-sign
can be the legal start of a normal Prolog clause. In the unlikely case
this is required, leave the first line blank or add a header comment.
To create a Prolog script, make the first line start like this:
#!/path/to/swipl<options>-s
Prolog recognises this starting sequence and causes the interpreter to receive the following argument list:
/path/to/swipl<options>-s<script>--<ScriptArguments>
Instead of -s, the user may use -f to stop Prolog from looking for a personal initialisation file.
Here is a simple script doing expression evaluation:
#!/usr/bin/swipl -q -t main -f
eval :-
current_prolog_flag(argv, Argv),
append(_, [--|Args], Argv),
concat_atom(Args, ' ', SingleArg),
term_to_atom(Term, SingleArg),
Val is Term,
format('~w~n', [Val]).
main :-
catch(eval, E, (print_message(error, E), fail)),
halt.
main :-
halt(1).
And here are two example runs:
% eval 1+2 3 % eval foo ERROR: Arithmetic: `foo/0' is not a function %
The Windows version supports the #! construct
too, but here it serves a rather different role. The Windows shell
already allows the user to start Prolog source files directly through
the Windows file-type association. However, Windows makes it rather
complicated to provide additional parameters for opening an individual
Prolog file. If the file starts with #!, the first line is
analysed to obtain additional command line arguments. The example below
runs the system in `quiet' mode.
#!/usr/bin/swipl -q -s ....
Note the use of /usr/bin/swipl, which specifies the
interpreter. This argument is ignored in the Windows version, but must
be present to ensure best cross-platform compatibility.