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
- Escriu un programa Prolog que defineixi una relació
avi/2
(un avi i el seu nét). - 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
- Escriu un programa Prolog que defineixi una relació
cosins/2
(dos cosins). - 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
- Escriu un programa Prolog que defineixi una relació
oncles/2
(un oncle i el seu nebot). - 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.
Curs de Programació en Prolog
Mòdul 1: Introducció a Prolog
- Què és Prolog?
- Instal·lant Prolog
- Primers Passos en Prolog
- Sintaxi i Estructura Bàsiques
- Fets, Regles i Consultes
Mòdul 2: Programació Bàsica en Prolog
Mòdul 3: Estructures de Dades en Prolog
Mòdul 4: Programació Avançada en Prolog
- Unificació Avançada
- Tall i Negació
- Meta-Programació
- Gramàtiques de Claus Definides (DCGs)
- Programació Lògica amb Restriccions
Mòdul 5: Prolog en la Pràctica
- Entrada/Sortida de Fitxers
- Depuració de Programes Prolog
- Biblioteques Prolog
- Interfície amb Altres Llenguatges
- Construint una Aplicació Prolog