view 3-Prolog/readme.txt @ 73:74976fddd25f

Ignore Erlang binary files and remove existing ones
author IBBoard <dev@ibboard.co.uk>
date Sat, 03 Feb 2018 19:52:45 +0000
parents 05871e7ac124
children
line wrap: on
line source

Installed gprolog from https://software.opensuse.org/package/gprolog

Some documentation says that Prolog may accept a shebang as the first line, but gprolog didn't like it.

Some editors will assume ".pl" means Perl. You may need to change your syntax highlighting.

Running code involves calling "gprolog" without parameters and then running "['filename']." (fullstop terminates the commend).
You can then query it with function calls (e.g. "likes(grommit, sheep)." in the Wallace & Grommit example). Prolog always
returns "yes" or "no" at a prompt when it has finished.

When you ask a question with a placeholder, the placeholder has to be capitalised. Lower-case makes it an atom.
When Prolog returns its answers, type ";" to get the next response or "a" to get all. Sometimes Prolog will end multiple responses
with "no", sometimes with "yes". This depends on whether it needs to do more calculations to check for more answers ("no")
or whether it knows it successfully gave you everything ("yes").

Rules don't need to be defined once. If you define the following:

ancestor(X, Y) :- father(X, Y).
ancestor(X, Y) :- father(X, Z), ancestor(Z, Y).

then Prolog will check both "definitions" of the rule.

(Note: putting the recursive "ancestor/2" call at the end is called "tail recursion" and the language can optimise it to
reduce call stack exhaustion issues)

For the sudoku code, example invocations are:

    % 2×2 grid, from the book - solved correctly
    sudoku([_,_,2,3,  _,_,_,_,  _,_,_,_,  3,4,_,_], 2,2, Solution).

    % 2x3 grid (size suggested in the exercise)
    % For some reason, this one can't be perfectly solved unless certain extra values are added
    sudoku([_,6,_,_,_,_,  1,_,3,_,5,_,  _,_,1,_,_,2,  6,_,_,4,_,_,  _,5,_,3,_,1,  _,_,_,_,2,_], 3, 2, Solution).

    % Normal 3x3 grid
    sudoku([_,8,3,_,4,_,_,1,7,  6,_,_,7,_,_,_,4,_,  _,_,_,8,_,_,9,_,_,  8,_,5,3,7,_,_,_,_,  _,_,_,1,_,9,_,_,_,  _,_,_,_,8,5,3,_,9,  _,_,6,_,_,8,_,_,_,  _,2,_,_,_,1,_,_,3,  3,4,_,_,2,_,5,9,_ ], 3, 3, Solution).