2.10.2.1 Using PrologScript
A Prolog source file can be used directly as a Unix program using the 
Unix #! magic start. The Unix #! magic is 
allowed because if the first letter of a Prolog file is #, 
the first line is treated as a comment.13The #-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, use one of the two alternatives below as 
first line. The first can be used to bind a script to a specific Prolog 
installation, while the latter uses the default prolog installed in $PATH.
#!/path/to/swipl #!/usr/bin/env swipl
The interpretation of arguments to the executable in the
HashBang line differs between Unix-derived systems. For 
portability, the #! must be followed immediately with an 
absolute path to the executable and should have none or one argument. 
Neither the executable path, nor the argument shall use quotes or 
spaces. When started this way, the Prolog flag argv 
contains the command line arguments that follow the script invocation.
Starting with version 7.5.8, initialization/2 
support the When options program and main, 
allowing for the following definition of a Prolog script that evaluates 
an arithmetic expression on the command line. Note that main/0 
is defined lib the library
library(main). It calls main/1 
with the command line arguments after disabling signal handling.
#!/usr/bin/env swipl
:- initialization(main, main).
main(Argv) :-
        concat_atom(Argv, ' ', SingleArg),
        term_to_atom(Term, SingleArg),
        Val is Term,
        format('~w~n', [Val]).
And here are two example runs:
% ./eval 1+2 3 % ./eval foo ERROR: is/2: Arithmetic: `foo/0' is not a function
Prolog script may be lauched for debugging or inspection purposes 
using the -l or -t. For example,
-l merely loads the script, ignoring main 
and
program initialization.
swipl -l eval 1+1 <banner> ?- main. 2 true. ?-
We can also force the program to enter the interactive toplevel after 
the application is completed using -t prolog:
swipl -t prolog eval 1+1 2 ?-
The Windows version simply ignores the #! line.14Older 
versions extracted command line arguments from the HashBang 
line. As of version 5.9 all relevant setup can be achieved using directives. 
Due to the compatibility issues around HashBang line 
processing, we decided to remove it completely.