Está en la página 1de 14

Recursividad

María Elena Cárdenas Mosqueda


Ejercicio: Laberinto

Imagina que la siguiente base de conocimiento describe


un laberinto. Los hechos determinan los puntos que
están conectados, es decir, de qué punto a qué punto te
puedes desplazar en un paso.

Además imagina que los caminos son sólo en un


sentido, es decir, puedes caminar solo en una dirección.
O sea que puedes caminar del punto 1al 2, pero no en
sentido contrario.

Escribe un predicado que te diga a qué lugares puedes


llegar desde un punto determinado.
¿Puedes llegar del punto 5 al 10?

¿A qué punto se puede llegar al iniciar en el punto 1? Y


¿Qué puntos se pueden alcanzar desde el punto 13?

ir(X,Y):- connected(X,Y).
ir(X,Y):- connected(X,Z), ir(Z,Y).
2
1

3
4

6
5

7 1
1
1
1
1
1
connected(1,2).
connected(3,4).
connected(5,6).
connected(7,8).
connected(9,10).
connected(12,13).
connected(13,14).
connected(15,16).
connected(17,18).
connected(19,20).
connected(4,1).
connected(6,3).
connected(4,7).
connected(6,11).
connected(14,9).
connected(11,15).
connected(16,12).
connected(14,17).
connected(16,19).
Ejercicio: Matryoshka

1. Representar en una base de


conocimiento la siguiente
Matryoshka, que nos indique cual
muñeca está contenida directamente
en cual otra.

2. Definir un predicado que nos diga


cual muñeca está contenida directa o
indirectamente dentro de otra.

Al preguntar:
dentro(natasha,katarina)
la respuesta será true,

y al preguntar:
dentro(katarina,olga)
será falso.
Ejercicio: Evolución Pokemon

1. Representar en una base de


conocimiento la evolución de
bulbasaur.

2. Definir un predicado que nos


indique cual pokemon era antes y Venusaur
cuál le sigue.

huevo

Ivysaur
Bulbasaur
Matt Leblanc
Dr Drake Ramoray

Joey Tribbiani
Ejercicio: Friends

1. Representar en una base de


conocimiento qué actor
representa a quién en la serie.

2. Definir un predicado que nos


indique quién está actuando en
cada momento.
Ejercicio: Viaje de Chihiro

1. Representar en una base


de conocimiento esta
matrioshka.

2. Definir un predicado que


nos indique cual de los
seres del viaje de Chihiro
está dentro de cuál

dentroDe(pollito, sinNombre).
dentroDe(sinRostro, pollito).
dentroDe(bo, sinRostro).
dentroDe(susuwatae, bo).
Ejercicio: Viajes
enCarro(newYork,hamilton).
Escribir un predicado, que determine si es posible
enCarro(hamilton,francia).
viajar de un lugar a otro encadenando los viajes
enCarro(valmont,roma).
en coche, tren y avión.
enCarro(valmont,metz).
Por ejemplo, su programa debe responder
enTren(metz,frankfurt).
afirmativamente a la consulta:
enTren(roma,frankfurt).
?viajes(valmont, francia)
enTren(metz,paris).
true
enTren(roma,paris).
Escriba un predicado que le diga la ruta a seguir
enAvion(frankfurt,bangkok).
cuando viaje de un lugar a otro.
enAvion(frankfurt,singapore).
? travel(valmont,losAngeles,X) .
enAvion(paris,losAngeles).
X = go(valmont,metz,
enAvion(bangkok,newYork).
go(metz,paris,
enAvion(singapore,newYork).
go(paris,losAngeles)))
enAvion(losAngeles,newYork).
Extienda el predicado anterior, para que no solo
diga la ruta, sino para que nos indique si el
trayecto será en tren, carro o avión.
byCar(auckland, hamilton).
byCar(hamilton, raglan).
byCar(valmont, saarbruecken).
byCar(valmont, metz). connected(X, Y) :-
byCar(X, Y);
byTrain(metz, frankfurt). byTrain(X, Y);
byTrain(saarbruecken, frankfurt). byPlane(X, Y).
byTrain(metz, paris).
byTrain(saarbruecken, paris). travel(X, Y) :- connected(X, Y).
travel(X, Z) :-
byPlane(frankfurt, bangkok). connected(Y, Z),
byPlane(frankfurt, singapore). travel(X, Y).
byPlane(paris, losAngeles).
byPlane(bangkok, auckland). tpte(X,Y,byCar) :- byCar(X,Y).
byPlane(singapore, auckland). tpte(X,Y,byTrain) :- byTrain(X,Y).
byPlane(losAngeles, auckland). tpte(X,Y,byPlane) :- byPlane(X,Y).

tpte2(X,Y,Z) :-
byCar(X,Y), Z= byCar;
byTrain(X,Y), Z= byTrain;
byPlane(X,Y), Z= byPlane.
Obtener el factorial de un número N
• La sucesión de fibonacci es 0,1,1,2,3,5,8,…
escribir una función fibonacci(X, Y), tal que Y
es n-esimo elemento de la sucesión.
Sumatoria de los números menores a N:

suma(N,Resultado) :-
N=<1 , Resultado is 1.

suma(N,Resultado) :-
N>1 ,
suma(N-1,ResultAux),
Resultado is ResultAux+N.
Tarea:
• Multiplicar con sumas

• Dividir con restas

• Potencias (Base, Expo, Rsp)

También podría gustarte