La depuració és una part essencial del desenvolupament de programari, i Prolog no és una excepció. En aquest tema, aprendrem diverses tècniques i eines per depurar programes Prolog de manera efectiva.

Continguts

Introducció a la Depuració en Prolog

La depuració en Prolog implica identificar i corregir errors en el codi. Els errors poden ser de diversos tipus, com ara errors de sintaxi, errors de lògica o errors d'execució. Prolog proporciona diverses eines per ajudar en aquest procés, incloent el traçador (tracer), punts de tall (breakpoints) i la depuració pas a pas.

Ús del Traçador (Tracer)

El traçador és una eina que permet seguir l'execució d'un programa Prolog pas a pas. Això és especialment útil per entendre com Prolog resol les consultes i per identificar on es produeixen els errors.

Exemple de Traçador

Suposem que tenim el següent programa Prolog:

pare(john, mary).
pare(john, peter).
mare(anna, mary).
mare(anna, peter).

germans(X, Y) :-
    pare(P, X),
    pare(P, Y),
    mare(M, X),
    mare(M, Y),
    X \= Y.

Podem utilitzar el traçador per veure com Prolog resol la consulta germans(mary, peter).

?- trace.
% The debugger will first creep -- showing everything (trace)
true.

?- germans(mary, peter).
   Call: (10) germans(mary, peter) ? 
   Call: (11) pare(_G123, mary) ? 
   Exit: (11) pare(john, mary) ? 
   Call: (11) pare(john, peter) ? 
   Exit: (11) pare(john, peter) ? 
   Call: (11) mare(_G123, mary) ? 
   Exit: (11) mare(anna, mary) ? 
   Call: (11) mare(anna, peter) ? 
   Exit: (11) mare(anna, peter) ? 
   Call: (11) mary\=peter ? 
   Exit: (11) mary\=peter ? 
   Exit: (10) germans(mary, peter) ? 
true.

Punts de Tall (Breakpoints)

Els punts de tall permeten aturar l'execució del programa en un punt específic. Això és útil per inspeccionar l'estat del programa en un moment determinat.

Exemple de Punts de Tall

Podem establir un punt de tall en la regla germans/2:

?- spy(germans/2).
% The debugger will first leap -- showing spypoints (debug)
true.

?- germans(mary, peter).
 * Call: (10) germans(mary, peter) ?

En aquest punt, l'execució s'atura i podem inspeccionar les variables i l'estat del programa.

Depuració Pas a Pas

La depuració pas a pas permet executar el programa una instrucció a la vegada, inspeccionant l'estat del programa després de cada pas.

Exemple de Depuració Pas a Pas

Podem utilitzar el mode de depuració pas a pas per seguir l'execució del programa:

?- debug.
% The debugger will first creep -- showing everything (trace)
true.

?- germans(mary, peter).
   Call: (10) germans(mary, peter) ? 
   Call: (11) pare(_G123, mary) ? 
   Exit: (11) pare(john, mary) ? 
   Call: (11) pare(john, peter) ? 
   Exit: (11) pare(john, peter) ? 
   Call: (11) mare(_G123, mary) ? 
   Exit: (11) mare(anna, mary) ? 
   Call: (11) mare(anna, peter) ? 
   Exit: (11) mare(anna, peter) ? 
   Call: (11) mary\=peter ? 
   Exit: (11) mary\=peter ? 
   Exit: (10) germans(mary, peter) ? 
true.

Errors Comuns i Solucions

Errors de Sintaxi

Els errors de sintaxi són causats per una mala formació del codi. Prolog generalment proporciona missatges d'error clars per aquests casos.

Errors de Lògica

Els errors de lògica són més difícils de detectar, ja que el programa pot executar-se sense errors de sintaxi però no produir els resultats esperats. Utilitzar el traçador i la depuració pas a pas pot ajudar a identificar aquests errors.

Errors d'Execució

Els errors d'execució es produeixen durant l'execució del programa, com ara bucles infinits o errors de memòria. La depuració pas a pas i els punts de tall són útils per identificar aquests errors.

Exercicis Pràctics

Exercici 1: Depuració amb el Traçador

  1. Escriu un programa Prolog que defineixi una relació avi/2 (un avi i el seu nét).
  2. Utilitza el traçador per depurar una consulta que trobi l'avi d'un nét específic.

Exercici 2: Utilització de Punts de Tall

  1. Escriu un programa Prolog que defineixi una relació cosins/2 (dos cosins).
  2. Estableix un punt de tall en la regla cosins/2 i depura una consulta que trobi dos cosins específics.

Exercici 3: Depuració Pas a Pas

  1. Escriu un programa Prolog que defineixi una relació oncles/2 (un oncle i el seu nebot).
  2. Utilitza la depuració pas a pas per depurar una consulta que trobi l'oncle d'un nebot específic.

Solucions

Solució a l'Exercici 1

avi(X, Y) :-
    pare(X, Z),
    pare(Z, Y).

% Consulta
?- trace.
% The debugger will first creep -- showing everything (trace)
true.

?- avi(john, mary).

Solució a l'Exercici 2

cosins(X, Y) :-
    pare(P1, X),
    pare(P2, Y),
    germans(P1, P2).

% Consulta
?- spy(cosins/2).
% The debugger will first leap -- showing spypoints (debug)
true.

?- cosins(mary, peter).

Solució a l'Exercici 3

oncles(X, Y) :-
    germans(X, P),
    pare(P, Y).

% Consulta
?- debug.
% The debugger will first creep -- showing everything (trace)
true.

?- oncles(john, mary).

Conclusió

La depuració és una habilitat essencial per a qualsevol programador. En Prolog, les eines com el traçador, els punts de tall i la depuració pas a pas són fonamentals per identificar i corregir errors en el codi. Practicar aquestes tècniques t'ajudarà a convertir-te en un programador Prolog més eficient i efectiu.

© Copyright 2024. Tots els drets reservats