Programación Declarativa – Prácticas de Prolog resueltas (II)
20/12/11
Después de la primera entrega, aquí os traigo más ejercicios de Prolog resueltos:
Ejercicio 1
Definir un predicado sus(X,Y,L1,L2) que sea capaz de sustituir un elemento X por otro Y en la lista L1, para dar L2.
Solución
1 2 3 4 | %Ejercicio 2 sus(_,_,[],[]). sus(X,Y,[H |
Ejercicio 2
Definir la relación aplanar(Lista, Aplanada), donde Lista es en general una lista de listas, tan compleja en su anidamiento como queramos imaginar, y Aplanada es la lista que resulta de reorganizar los elementos contenidos en las listas anidadas en un único nivel, i.e. una lista plana. Por ejemplo:
1 2 | ?- aplanar([[a, b], [c, [d, e]], f], L). L = [a, b, c, d, e, f] |
Solución
1 2 3 4 | %Ejercicio 3 aplanar([],[]). aplanar([X |
Ejercicio 3
Definir un predicado igualesElem(L1,L2) que compruebe que L1 y L2 son listas que
contienen los mismos elementos independientemente del orden de aparición.
Solución
1 2 3 4 5 | %Ejercicio 4 igualesElem([],[]). igualesElem([H1 |
Ejercicio 4
Definir un predicado descomponer(N,A,B) que permita resolver el problema de descomponer un número natural N en la suma de dos pares A y B. Esto es, descomponer(N,A,B) debe tomar como entrada un natural N y devolver dos naturales A y B tales que N = A + B.
Solución
1 2 3 4 | descomponer(N,A,B):-
between(0,N,A), A mod 2=:=0,
between(0,N,B), B mod 2=:=0,
A+B=:=N. |
Ejercicio 5
Rompecabezas de Brandreth. El cuadrado de 45 es 2025. Notad que si partimos el número
en dos obtenemos los números 20 y 25 cuya suma es, precisamente, 45. Obtener que otros números cuyo cuadrado es un número de cuatro cifras cumplen esta propiedad. Con este fin, definir un predicado numBrandreth (N, C) que devuelva uno de estos números N y su cuadrado C.
Solución
1 | numBrandreth(N,C):-between(32,99,N), C is N*N, A is C mod 100, B is C//100, A+B=:=N. |
Puedes dejar un comentario, o referenciar este post desde tu sitio web.


Responde
Leave A Reply