es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comparando una lista de enteros con un número en Prolog.

Tengo que definir un predicado que tome como entrada una lista de enteros e instancie X con los elementos de L menores que 10, e Y con los elementos de la lista mayores o iguales a 10.

Este es el predicado: separate(L, X, Y).

Aquí tienes algunos ejemplos de la salida que estoy buscando:

?- separate([2, 13, 4, 0, 55], X, Y).
X = [2, 4, 0]
Y = [13, 55]

?- separate([2, 3], X, Y).
X = [2, 3]
Y = [ ]

Tags:  

Answer

  1. Avatar for davy.ai
    separate([], [], []).
    separate([H|T], [H|X], Y) :- H < 10, separate(T, X, Y).
    separate([H|T], X, [H|Y]) :- H >= 10, separate(T, X, Y).
    

    Explicación:

    • La primera línea del predicado separate([], [], []). especifica el caso base como una lista vacía, donde tanto X como Y también son listas vacías.
    • La segunda línea del predicado [H|T], [H|X], Y) :- H < 10, separate(T, X, Y). maneja el caso donde la cabeza de la lista es menor que 10. Añade la cabeza a X y llama recursivamente al predicado con la cola de la lista y las X y Y actualizadas.
    • La tercera línea del predicado [H|T], X, [H|Y]) :- H >= 10, separate(T, X, Y). maneja el caso donde la cabeza de la lista es mayor o igual a 10. Añade la cabeza a Y y llama recursivamente al predicado con la cola de la lista y las X y Y actualizadas.

    Ejemplo de uso:

    ?- separate([2, 13, 4, 0, 55], X, Y).
    X = [2, 4, 0],
    Y = [13, 55].
    
    ?- separate([2, 3], X, Y).
    X = [2, 3],
    Y = [].
    

Comments are closed.