siguiente anterior arriba atrasadelante (solo si previamente se ha ido
atras)

A.2.2. Reglas recursivas

Veamos cómo se puede definir la relación «superior» , entendiendo que un superior es el jefe de una persona, o el jefe de su jefe, o el jefe del jefe de su jefe. . . En lógica de predicados la representábamos con esta sentencia (Apartado 4.5.1):

( A x)( A y)((jefe(x,y)  \/ ( E z)(jefe(x,z)  /\ superior(z,y))) ==> superior(x,y))

Aunque en Prolog se puede expresar la disyunción, con el símbolo «;» (Apartado A.1.5) en en cuerpo de la regla, es más claro utilizar dos reglas, una que expresa la relación inmediata: X es superior de Y si X es jefe de Y, es decir:

R1: superior(X,Y) :- jefe(X,Y).

y otra para expresar con una regla finita la cadena infinita de relaciones mediante recursión: X es superior de Y si X es jefe de algún individuo intermedio, Z, que es superior de Y, o sea:

R2: superior(X,Y) :- jefe(X,Z), superior(Z,Y).

Añadiendo estas reglas, se pueden hacer consultas como:

 ?- superior(X,a4).  
 X=b3  
 X=a1  
 X=a2  
 ?- superior(a2,X).  
 X=a3  
 X=b3  
 X=c3  
 X=a4  
 X=b4


siguiente
anterior arriba atrasadelante (sólo si previamente se ha ido atras)


algunos derechos reservados DIT-ETSIT-UPM
Portada