Anda di halaman 1dari 4

Examen 2: Programacin Lgica y Programacin Funcional

NOMBRE: _____________________________________

NIA: _______________________________________________

A. Programacin Lgica

1. Considera el programa p(X) :- p(Y). Que pasa si le preguntamos a Prolog ?- p(1).

Respuesta: Se queda en un loop infinito.

2. Define un predicado set(L) que tenga xito si L es un conjunto (e.d. una lista sin
elementos repetidos) y falle si no lo es (e.d. si no es una lista o es una lista con
elementos repetidos).

Respuesta:
set([]).
set([X|L]) :- not(member(X,L)), set(L).

3. Considera el programa:

p([],X,X).
p([X|X1],Y,[X|Z]) :- p(X1,Y,Z).
q(X,Y,Z) :- p(X,_,Y) , p(X,_,Z).

(i) Que hace q(X,Y,Z) si Y y Z se le pasan como entradas y devuelve X como salida?

Respuesta: Encuentra un prefijo comun de Y y Z (nota que p es append).


(ii) Termina q(X,Y,Z) (tambin con X como salida, Y y Z como entradas)? Si o no.

Respuesta: Si

4. Escribe un predicado que borre una vez un elemento de una lista, e.d. que se
comporte como sigue con el siguiente ejemplo:

?- borra(a,[a,b,a],L).
L=[b,a];
L=[a,b];
no

Respuesta:

borra(X,[X|T],T).
borra(X,[Y|T],[Y|T1]) :- borra(X,T,T1).

(asumiendo que la lista de entrada es no vacia y que el elemento a borrar aparece en la lista)

5. Que efecto tiene el corte ! en el cdigo de member/2 si el primer argumento


es salida y el segundo es entrada?

member(X,[X|Xs]) :- !.
member(X,[Y|Ys]) :- member(X, Ys).

Respuesta: Que en caso de multiples soluciones, solo nos regresa una de ellas.
B. Programacin Funcional

1. Considera el siguiente programa en ML:

fun gcd 0 n = n
| gcd n 0 = n
| gcd m n = if (m > n) then gcd (m-n) n
else gcd (n-m) m

Evalua gcd 9 6 (muestra todas las rescrituras intermedias)

Respuesta:

if (9>6) then gcd (9-6) 6 else gcd (6-9) 9


gcd (9-6) 6

(Trivial como se procede)

gcd 0 3
3

2. Considera el siguiente programa en ML:

fun e(0) = true


| e(1) = false
| e(x) = o(x-1)
and o(0) = false
| o(1) = true
| o(x) = e(x-1);

Evala e 7 (muestra todas las rescrituras intermedias)

Respuesta:

o(7-1)
o(6)
e(6-1)

e(1)
false
3. Describe 3 diferencias y una similitud entre la programacin funcional y la
programacin lgica.

Diferencias:

1. La programacin funcional esta basada en rescritura de expresiones

2. En la programacin funcional las variables tienen tipos.

3. la programacin funcional es de 2do orden (las funciones pueden ser argumentos)

Similitud:

1. Ambas tienen variables no destructivas (single assignment variables)

4. El tamao de un rbol binario es el nmero de nodos que contiene. Define una


funcin tamao: IntBinTree int que tome un rbol binario y regrese el
tamao del rbol (un entero). Asume que cada nodo tiene la forma nodo(l,n,r)
donde l es el arbol izquierdo y r es el arbol derecho del nodo n.

Respuesta:

Fun size Empty = 0


| size (Node(l,_,r)) = 1 + size l + size r

5. Convierte el siguiente cdigo en Prolog a cdigo en SML:

member(X,[X|_]).
member(X,[_|Xs]) :- member(X,Xs).

Respuesta:

fun member (x,[]) = false |


member (x,y::xs) = if (x = y) then
true
else
member (x,xs);

Anda mungkin juga menyukai