Διαδικαστικά κατηγορήματα συστήματος PROLOG
1.Αποκοπή, !. 2.Είσοδος / Έξοδος read (X) - X ταυτοποιείται με τον όρο που γράφεται στην οθόνη write (X)- Γράφει τον όρο Χ πάνω στην οθόνη Το “write” δεν επηρεάζει το πρόγραμμα, το “read” όμως το επηρεάζει!! Τα αποτελέσματα των “read” και “write” δεν αλλάζουν με την οπισθοδρόμηση.
Παράδειγμα writeln ([X | Xs]) :- write (X), writeln (Xs). writeln ([ ]) :- nl. ?writenl ([‘The value of X is’, X]).
3. assert (c): Προσθέτει τον κανόνα ‘c’ στο τέλος του προγράμματος. αsserta (c): Προσθέτει τον κανόνα ‘c’ στην αρχή του προγράμματος. (:- dynamic parent/z :- dynamic child /z) retract (c): Αφαιρεί τον πρώτο κανόνα του προγράμματος που τακτοποιείται με τον κανόνα ‘c’ ? Retract ((α :- X)). Τα assert και retract προκαλούν παρενέργειες (side-effects) στο πρόγραμμα.
Προγραμματισμός 2ου επιπέδου (second-order programming) P:p (1) p (2) p (5) p (X) :- X is ? p (X) X=1; X=3;? setof (X, p (X), Y). X=5;Y = [1, 3, 5, 7]. X=7; No bagof (Term, Goal, BagofSolutions) setof (Term, Goal, BagofSolutions) Forall (Goal, Condition) ισχύει αν Condition …. για κάθε λύση του Goal Λίστες
Παράδειγμα prime (X) :- forall (in_range (2, Y, X) not …. in_range (S, S, E). in_range (S, V, E) :- N is S+1, N<E, in _range (N, V, E) divides (Y, X) :- mod (X, Y, O).
Interactive Programs Αλληλεπιδραστικά Προγράμματα Αλληλεπιδραστικά Προγράμματα Παράδειγμα echo :- read (X), echo (X). echo (X) :- last_input (X), !. echo (X) :- write (X), nl, read (Y), ! echo (Y). (last_input (X) :- … συνθήκη τερματισμού) Πριν δούμε άλλα παραδείγματα θα μελετήσουμε το θέμα του μετα-προγραμματισμού (μετα- μεταβλητή στην Prolog).
An interactive shell shell shell_prompt, read (Goal), shell (Goal). shell (exit) !. shell (Goal) ground (Goal), !, shell_solve_ground (Goal), shell. shell (Goal) shell_solve (Goal), shell. shell_sovle (Goal) Goal, write (Goal), nl, fail. shell_sovle (Goal) write (‘No (more) solutions’), nl. Shell_solve_ground (Goal) Goal, !, write (‘Yes’), nl. Shell_solve_ground (Goal) write (‘No’), nl. Shell_prompt write (‘Next command?’).