Lógica: práctica 0
Ejercicios de listas
En esta primera práctica entregaremos un
programa Prolog llamado listas.pl que deberá
implementar los siguientes predicados:
- Programa el predicado suma(L,N)
que toma cualquier lista de números enteros L y
devuelve en N la suma total de todos los elementos
de L. Ejemplos:
?- suma([4,2,-7,11],N).
N = 10.
?- suma([],N).
N = 0.
?- suma([2,2,2,2,2],N).
N = 10.
- Programa el predicado intervalo(A,B,L)
que toma como entrada dos números enteros A y B
y tiene que generar en L
la lista de números comprendida entre A y B.
Ejemplos:
?-
intervalo(2,7,L).
L = [2, 3, 4, 5, 6, 7].
?- intervalo(-5,0,L).
L = [-5, -4, -3, -2, -1, 0].
?- intervalo(8,2,L).
L = [].
Nota: no es necesario comprobar que A y B
sean números enteros. Se presupone que siempre
lo serán.
- El predicado '<' de Prolog sirve para comparar
números, pero la versión '@<' permite
comparar cualquier par de términos de forma
ordenada. Por ejemplo, a @< b
devuelve true. Programa el
predicado inserta(X,L1,L2)que
inserta un elemento X en
una lista L1 que
está previamente ordenada (con la relación de orden
@<) y devuelve la nueva lista L2
ordenada pero conteniendo también el nuevo elemento
X.
Ejemplos:
?- inserta(d,[a,f,h],L).
L = [a, d, f, h].
?- inserta(5,[3,6,8],L).
L = [3, 5, 6, 8].
?- intervalo(3,5,L), inserta(23,L,L2).
L = [3, 4, 5],
L2 = [3, 4, 5, 23].
- Define el predicado insercion(L1,L2)
que ordena (usando la relación @<) cualquier
lista L1
para devolver la lista ordenada L2
con los mismos elementos que L1,
utilizando el método de ordenación por inserción.
Ese método va tomando elemento a elemento de la
lista original y los va insertando en una lista
nueva que permanece siempre ordenada. Usa el
predicado inserta(X,L1,L2)
para cada paso de inserción de este método de
ordenación. Ejemplos:
?- insercion([b,a,g,e],L).
L = [a, b, e, g].
?- insercion([2,6,-2,6,11,21],L).
L = [-2, 2, 6, 6, 11, 21].
Opcional: apóyate en una versión del
predicado que realiza la inserción de forma
acumulada. Por ejemplo, usa acumula(L1,L2,L3)
para ir tomando elementos de L1
uno a uno, e insertándolos en L2
(ordenada) para generar L3.
La llamada inicial a ese predicado sería acumula(L1,[],L2).
Entrega y evaluación
Esta práctica no puntúa, pero su entrega
se tendrá en cuenta a la hora de valorar la evaluación
continua de cara a la defensa de las demás prácticas. La
entrega se realizará a través del campus virtual. La
práctica se realizará preferentemente en grupos de 2
alumnos. La entrega se realizará en una tarea del
Campus Virtual (moodle): es suficiente con realizar la
entrega en una de las dos cuentas de alumnos, pero el
código debe incluir en las primeras líneas en
comentarios los nombres de los dos componentes del
grupo. Fecha de entrega: 26 de
marzo de 2026 (23:59).
|
|