Rappresentazione del flusso di controllo

Per comprendere appieno il modo di operare delle procedure di debugging è necessario avere familiarità con il modo in cui l'interprete Prolog opera nel tentativo di soddisfare una congiunzione di goal. Un modello semplice ed efficace per rappresentare l'esecuzione di un programma è il modello a scatole proposto in Clocksin e Mellish [1981]. Questo modello permette di seguire agevolmente la traccia dell'esecuzione di un programma.

Secondo il modello a scatole, ogni invocazione di una procedura viene rappresentata con una scatola con quattro porte, come nella Figura 1.



              CALL  +------------------+  EXIT
             ------>|                  |------->
                    |    procedura     |
             <------|                  |<------
               FAIL +------------------+  REDO

Figura 1
Per la stessa procedura, a invocazioni diverse corrispondono scatole diverse. Ad esempio, per la procedura ancestor e per i fatti father
   ancestor(X,Y)\|:- father(X,Y).
   ancestor(X,Y)\|:-                                          
          father(X,Z)
          ancestor(Z,Y).


   father (john,jim).
   father (jim, mike).                                      
   father (john,charlie).
all'invocazione della procedura ancestor in seguito al goal
   ?- ancestor(john,mike).
corrisponde la scatola nella Figura 2 con le variabili X e Y istanziate rispettivamente con john e mike.

           CALL +------------------------+ EXIT
          ----->|   ancestor(X,Y) :-     |----->
                |        father(X,Y).    |
                |                        |
                |   ancestor(X,Y) :-     |
                |        father(X,Z),    |
          <-----|        ancestor(Z,Y).  |<-----
           FAIL +------------------------+ REDO


Figura 2
Attraverso le porte è possibile seguire il flusso di controllo nell'esecuzione di un programma. In particolare, il flusso può essere pensato come un puntatore che si muove lungo il codice all'interno della scatola entrando per le porte di ingresso e uscendo per le porte di uscita.