Recursividad Prolog
El concepto de recursividad en el paradigma lógico no sólo puede ser aplicado a listas, como en los paradigmas procedurales o funcionales. La relación recursiva entreelementos de un mismo tipo no tiene por qué estar contenida en una lista.
Un ejemplo de relación recursiva es la relación antepasado.
Defino antepasado de una persona X a:
Y tal que Y es progenitor deX;
Y tal que Z es progenitor de X e Y es antepasado de Z.
Es decir, un antepasado mío o es mi padre o bien es una persona que es antepasado de mi padre (su padre, o el padre de su padre,etc...).
progenitor (daniel, papa).
progenitor (papa, abuelo).
progenitor (abuelo, bisa).
antepasado(X,Y):- progenitor(X, Y).
antepasado(X,Y):- progenitor(X,Z), antepasado(Z,Y).
Entonces, paraeste caso, la relación progenitor es el CORTE DE LA RECURSIVIDAD.
Otro ejemplo:
Tengo habitaciones conectadas entre sí por puertas (como en el DOOM), y quiero llegar de una habitación a otra, esdecir, hallar un paso entre las habitaciones.
Veo entonces las relaciones:
puerta(Habitacion1, Habitacion2)
paso(Habitacion1, HabitacionN).
Como se define el paso?
El paso entre doshabitaciones A y B es que haya una puerta entre las habitaciones (este es el CORTE DE LA RECURSIVIDAD), o bien que haya una puerta entre A y otra habitación C y que desde esta haya paso a B.
Por ejemplo:puerta(cuarto, pasillo).
puerta(pasillo, banio).
puerta(pasillo, cocina).
puerta(cocina, living).
paso(Habitacion1, Habitacion2):- puerta(Habitacion1, Habitacion2).
paso(Habitacion1,Habitacion2):- puerta(Habitacion1, Habitacion3),
paso(Habitacion3,Habitacion2).
Otros ejemplos de funciones recursivas:
Objetos que están apoyados en objetos:
Un objeto se encuentra sobre otroobjeto si:
1- Está apoyado en ese objeto (corte recursivo).
2- Está apoyado en algún objeto que está sobre el otro objeto.
predicates
apoyado(symbol, symbol).
sobre(symbol, symbol).
clauses...
Regístrate para leer el documento completo.