Está en la página 1de 2

ISC-317-T Programación Lógica

Lisibonny Beato

Compendio de Ejercicios III

1. Desarrolle las siguientes reglas de manipulación de listas. (30%, 5% c/u)

1.1. Que devuelva el último elemento de una lista dada.

1.2. Que devuelva el penúltimo elemento de una lista dada.

1.3. Que devuelva el n-ésimo elemento de una lista dada.

1.4. Que devuelva la cantidad de elementos de una lista dada.

1.5. Que devuelva los número pares de una lista dada.

1.6. Que devuelva la inversa de una lista dada.

2. Se tiene el siguiente programa en Prolog (30%):

plato(cereales,110).
plato(berenjenas,155).
plato(leche,90).
plato(arroz,250).
plato(yuca,300).
plato(queso_frito,200).
plato(filete_res,185).
plato(pollo,150).
plato(quesillo,500).
come(juan,[arroz,pollo,quesillo]).
come(maria,[yuca,queso_frito]).
come(pedro,[cereales,leche]).
come(ana,[arroz,filete_res,berenjenas]).

pertenece(X, [X|_]).
pertenece(X, [_|Cola]) :-pertenece(X, Cola).

2.1 Escriba un predicado come_arroz/1 que le diga quienes comen arroz .(10%)
2.2 Escriba un predicado precios/0 que pida el nombre de una persona e imprima
cada plato que consume una persona conjuntamente con su precio. (20%)

Un ejemplo de ejecución sería el siguiente. Tome en cuenta que la salida debe ser
exactamente igual a esta:

Digame el nombre: pedro.


Platos:
cereales 110 ;
leche 90

3. Haga lo que se le pide con las siguientes reglas recursivas (40%, 10% c/u)

3.1. Recuerde la representación de números naturales que usamos en clase, que


estaba en función de los siguientes del cero. ¿Cómo completaría usted la siguiente
regla recursiva que dice si dos números naturales son iguales?

iguales(0,0).
iguales(s(X),s(Y)) :-

3.2. La siguiente regla recursiva compress/2 elimina los elementos consecutivos


duplicados en una lista:

compress([],[]).
compress([X],[X]).
compress([X,X|Xs],Zs) :- compress([X|Xs],Zs).
compress([X,Y|Ys],[X|Zs]) :- X \= Y, compress([Y|Ys],Zs).

¿Podría explicar en detalle como lo logra?

3.3. Se busca que la siguiente regla divida una lista en dos partes. Complete el
objetivo faltante y tome en cuenta que el segundo término representa la cantidad
de elementos que tendrá la primera lista producida:

split(L,0,[],L).
split([X|Xs],N,[X|Ys],Zs) :- N > 0, N1 is N - 1, .

3.4. ¿Qué hace la siguiente regla?

surprise(I,I,[I]).
surprise(I,K,[I|L]) :- I < K, I1 is I + 1, surprise(I1,K,L).

También podría gustarte