Υπάρχουν δύο πλευρές κάθε λογικού προγράμματος: η δηλωτική (declarative) και η διαδικαστική (procedural). Η δηλωτική αφορά
το περιεχόμενο ενός προγράμματος (τι μας λέει το πρόγραμμα), ενώ η διαδικαστική αφορά τον τρόπο με τον οποίο εξάγεται περιεχόμενο από το
πρόγραμμα. Στην ιδανική περίπτωση, ο προγραμματιστής έχει ν' ασχοληθεί μόνο με τη δηλωτική πλευρά, να περιγράψει, δηλαδή, το πρόβλημα το
οποίο θέλει να επιλύσει και ν' αφήσει τη διαδικαστική πλευρά (τον έλεγχο) στο σύστημα. Για παράδειγμα, ο κανόνας
son(X, Y) :- father(Y, X), male(X).
μπορεί να διαβαστεί με δύο τρόπους:
X
και Y
, ο X
είναι ο γιος του Y
, αν ο Y
είναι πατέρας του X
και το X
είναι αρσενικό.
X
είναι γιος του Y
'', πρώτα αποδεικνύουμε ότι
``ο Y
είναι πατέρας του X
'' κι έπειτα ότι ``το X
είναι αρσενικό''.