En aquest tema, explorarem dos conceptes avançats en Prolog: el tall (cut
) i la negació. Aquests conceptes són fonamentals per controlar el flux d'execució i la lògica dels programes en Prolog.
Tall (cut
)
El tall és un operador especial en Prolog que s'utilitza per controlar el retrocés. Quan Prolog troba un tall, es descarten totes les alternatives de retrocés que s'han generat fins al punt del tall. Això pot ser útil per optimitzar el rendiment i per implementar determinades lògiques de control.
Sintaxi del Tall
El tall es representa amb el símbol !
.
Exemple de Tall
En aquest exemple, la funció max/3
determina el màxim de dos nombres. El tall !
s'utilitza per evitar que Prolog consideri la segona regla si la primera ja ha estat satisfeta.
Explicació del Codi
-
Primera Regla:
max(X, Y, X) :- X >= Y, !.
- Si
X
és major o igual aY
, el resultat ésX
. - El tall
!
impedeix que Prolog busqui altres solucions després d'aquesta regla.
- Si
-
Segona Regla:
max(_, Y, Y).
- Si la primera regla no es compleix, aquesta regla s'aplica i el resultat és
Y
.
- Si la primera regla no es compleix, aquesta regla s'aplica i el resultat és
Exercici Pràctic
Exercici: Escriu una funció min/3
que determini el mínim de dos nombres utilitzant el tall.
Negació
La negació en Prolog es refereix a la capacitat de negar una condició o una afirmació. Prolog utilitza la negació com a fallada (negation as failure
), la qual cosa significa que una afirmació es considera falsa si Prolog no pot demostrar que és certa.
Sintaxi de la Negació
La negació es representa amb el predicat \+
.
Exemple de Negació
En aquest exemple, la funció es_buit/1
determina si una llista és buida.
Explicació del Codi
\+ (Llista = [_|_])
: Aquesta condició és certa siLlista
no pot unificar-se amb una llista no buida (una llista amb capçalera i cua).
Exercici Pràctic
Exercici: Escriu una funció no_es_buit/1
que determini si una llista no és buida utilitzant la negació.
Resum
En aquesta secció, hem après sobre dos conceptes avançats en Prolog: el tall (cut
) i la negació. El tall s'utilitza per controlar el retrocés i optimitzar el rendiment, mentre que la negació permet negar condicions o afirmacions. Aquests conceptes són fonamentals per escriure programes Prolog més eficients i amb una lògica de control més precisa.
En el proper tema, explorarem la meta-programació en Prolog, que ens permetrà escriure programes que manipulen altres programes.
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