How to run SWI-Prolog from the command line


Is there a way to just create a prolog script called like this:

#!/usr/local/bin/swipl -q -s -t main

  write('Hello World\n').

And be able to run it from the terminal like this?

Hello World

When I do that it gives me this: line 3: main:-: command not found line 4: syntax error near unexpected token `'Hello World\n'' line 4: `  write('Hello World\n').'

I am able to get it working by writing this on the command line:

$ swipl -q -f -t main
Hello World

But is there a way to just run the straight script as an executable instead?


Haven't yet been able to get this to work. Here is the output from the commands @Boris asked in the comments in his answer:

$ ls -l
total 8
-rwxr-xr-x  1 viatropos  staff  235 Aug 26 20:28
$ cat

:- set_prolog_flag(verbose, silent).

:- initialization main.

main :-
    format('Example script~n'),
    current_prolog_flag(argv, Argv),
    format('Called with ~q~n', [Argv]),
main :-
$ which swipl
$ swipl --version
SWI-Prolog version 6.6.6 for x86_64-darwin13.1.0
$ ./
./ line 3: syntax error near unexpected token `('
./ line 3: `:- set_prolog_flag(verbose, silent).'

I am on Mac OSX 10.9.2, and installed swipl with homebrew via brew install swi-prolog --with-libarchive

Best Solution

ISO directive: initialization. This should work.

:- initialization main.

main :-
  write('Hello World\n').

edit sorry, I skipped over most interesting details. Here is a sample script, let's say saved in ~/test/

#!/home/carlo/bin/swipl -f -q

:- initialization main.

main :-
  current_prolog_flag(argv, Argv),
  format('Hello World, argv:~w\n', [Argv]),

and made executable with

chmod +x ~/test/

then I get

~$ ~/test/
Hello World, argv:[]

~$ ~/test/ as,dnj asdl
Hello World, argv:[as,dnj,asdl]

In script, I used the swipl path that results from building from source without admin privileges. The SWI-Prolog build process put bin and lib under ~/bin and ~/lib

Note: the -f flag disables loading the initialization ~/.plrc, and this could be necessary to get more 'strict control' over execution...

I'm currently unsure if the documentation page is up-to-date with current SW status. From some mailing list message, and my own efforts to reuse thea, seems that command line flags changed recently...