• Places
    • Home
    • Graphs
    • Prefixes
  • Admin
    • Users
    • Settings
    • Plugins
    • Statistics
  • Repository
    • Load local file
    • Load from HTTP
    • Load from library
    • Remove triples
    • Clear repository
  • Query
    • YASGUI SPARQL Editor
    • Simple Form
  • Help
    • Documentation
    • Tutorial
    • Roadmap
    • HTTP Services
  • Login

2.10.2 For running the result
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Overview
        • Compilation
          • For running the result
            • Using PrologScript
            • Creating a shell script
            • Creating a saved state
            • Compilation using the -c command line option
    • Packages

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.12The #-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. Below is a simple script doing expression evaluation:

#!/usr/bin/env swipl

:- initialization main.

eval :-
        current_prolog_flag(argv, Argv),
        concat_atom(Argv, ' ', 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: is/2: Arithmetic: `foo/0' is not a function
%

The Windows version simply ignores the #! line.13Older 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.

ClioPatria (version V3.0.0-338-gc91dba5-DIRTY)