SWI-Prolog 7.6.4 Reference Manual: Section A.16

## A.16 library(main): Provide entry point for scripts

See also
  XPCE users should have a look at `library(pce_main)`, which starts the GUI and processes events until all windows have gone.

This library is intended for supporting PrologScript on Unix using the `#!` magic sequence for scripts using commandline options. The entry point main/0 calls the user-supplied predicate main/1 passing a list of commandline options. Below is `echo' in Prolog (adjust /usr/bin/swipl to where SWI-Prolog is installed)

    #!/usr/bin/env swipl

    :- initialization(main, main).

    main(Argv) :-
            echo(Argv).

    echo([]) :- nl.
    echo([Last]) :- !,
            write(Last), nl.
    echo([H|T]) :-
            write(H), write(' '),
            echo(T).

main
  Call main/1 using the passed command-line arguments. Before calling main/1 this predicate installs a signal handler for `SIGINT` (Control-C) that terminates the process with status 1.
[det]argv_options(+Argv, -RestArgv, -Options)
  Generic transformation of long commandline arguments to options. Each --Name=Value is mapped to Name(Value). Each plain name is mapped to Name(true), unless Name starts with `no-`, in which case the option is mapped to Name(false). Numeric option values are mapped to Prolog numbers.
  See also
    `library(optparse)` provides a more involved option library, providing both short and long options, help and error handling. This predicate is more for quick-and-dirty scripts.