SWI-Prolog 8.0.3 Reference Manual: Section A.20

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

See also
  - `library(optparse)` for comprehensive option parsing.
  - `library(prolog_stack)` to force backtraces in case of an uncaught exception.
  - 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 a simle `echo` implementation in Prolog.

    #!/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.