This file is indexed.

/usr/lib/s9fes/help/prolog is in scheme9 2010.11.13-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
S9 LIB  (prolog list1 list2)          ==>  list
        (new-database!)               ==>  unspecific
        (fact! list)                  ==>  unspecific
        (predicate! list1 list2 ...)  ==>  unspecific
        (query list)                  ==>  list

        (load-from-library "prolog.scm")

This is a tiny PROLOG interpreter that is based on an even
tinier PROLOG interpreter written in MACLISP by Ken Kahn.

The PROLOG procedures takes a query LIST1 and a database
LIST2 as arguments, attempts to prove LIST1 in LIST2, and
returns the result(s).

NEW-DATABASE! sets up a fresh PROLOG database (thereby
deleting any existing one).

FACT! adds a new fact to the database.

PREDICATE! adds a predicate with the head LIST1 and the
clauses LIST2 ... to the database.

QUERY attempts to prove LIST1. It returns a list of results.
An empty list indicates that LIST1 could not be proven.

See "prolog-test.scm" for an example program.

The following macros add some syntactic sugar for interactive
use; they allows you to write, for instance, (! (man socrates))
instead of (fact! '(man socrates)).

(! fact)              ==>  unspecific
(:- list1 list2 ...)  ==>  unspecific
(? query)             ==>  unspecific

The following special predicates are implemented in the
interpreter: (== A B) returns a new environment if A can be
unified with B, else NO. (Dif A B) returns NO if A can be
unified with B, else YES (use only at the end of a clause!)

(begin (! (man socrates))
       (:- (mortal ?x)
           (man ?x))
       (query '(mortal ?who)))  ==>  (((who . socrates)))