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:

  1. 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.


  2. 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.

  3. 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].

  4. 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).


Maintained by Pedro Cabalar.