Ejercicios en Listas
En esta sección se presentan algunos ejercicios en los cuales se utilizan las listas como punto principal de los programas.
El siguiente ejemplo, determina la longitud de una lista dada en el primer argumento, devolviendo el tamaño en el segundo argumento.
1 2 |
tamaño([],0). tamaño([X|Y], N):-tamaño(Y, N1), N is N1+1. |
Si nosotros consultamos
1 |
?- tamaño([1,2,3,4], N). |
La respuesta de PROLOG será: N = 4.
También podemos verificar si un elemento cualquiera, pertenece a una lista dada, esto por medio del ejemplo. En este ejemplo, se verificara si el elemento X, pertenece a la lista dada.
1 2 |
pertenece(X,[X|L]). pertenece(X,[Y|L]) :- pertenece(X,L). |
Si se realiza la consulta
1 |
pertenece(a, [1,a,2,4,f]). |
El interprete dará como resultado True.
El siguiente ejemplo, realiza la operación append, previamente definida, en este caso llamaremos a la función concatena. Para este ejemplo, vamos a tener una lista en el primer argumento de la función, esta lista será concatenada con la lista almacenada en el segundo argumento de la función, y será devuelta en el tercer argumento de la función.
1 2 |
concatena([ ],B,B). concatena ([X|D],B,[X|E]) :- concatena (D,B,E). |
Si nosotros realizamos la consulta,
1 |
?- concatena([1,2,3], [a,b,c], A). |
PROLOG, dará como resultado A = [1, 2, 3, a, b, c].
Para el siguiente caso, vamos a auxiliarnos de la función append para rotar una lista. En este caso, se va a rota una cantidad N de veces la lista [X|L], y se va a devolver como una lista L.
1 2 |
rota(X,X,0). rota([X|Y], L, N):-N1 is N-1, append(Y,[X],Y1), rota(Y1, L, N1). |
Si nosotros realizamos la consulta
1 |
?- rotar([1,2,3,4], N, 2). |
PROLOG nos dará como respuesta: N = [3, 4, 1, 2].
El siguiente ejemplo nos muestra como invertir una lista dada. Podemos utilizar la función reservada de PROLOG, append, o podemos utilizar el ejemplo propuesto concatena.
1 2 |
invierte_lista([X],[X]). invierte_lista ([X|Y],Z):- invierte_lista (Y,W), concatena(W,[X],Z). |
Por lo que si le damos la siguiente consulta
1 |
?- invierte_lista([1,2,3,4],A). |
Obtendremos que A = [4, 3, 2, 1].
Ahora, realizando una suma con los elementos de la lista, tenemos
1 2 |
suma([X],X):-!. suma([X|Y],R):-suma(Y,Z), R is Z + X. |
al realizar la consulta, tenemos:
1 2 |
?- suma([1, 2, 3, 4], R). R = 10. |
Un ejemplo que parece muy simple, es el de eliminar el primer elemento de una lista, este ejemplo lo podemos ver en la forma
1 |
elimina(X,[X|T],T). |
Si realizamos la consulta, obtendremos.
1 2 3 |
?- elimina(primero,[primero,segundo,tercero,cuarto], X). X = [segundo, tercero, cuarto]. |
En el siguiente ejercicio, vemos como definir si un valor definido es un valor mayor o igual al elemento más grande de la lista.
1 2 |
mayor([ ],_). mayor([X|L],N) :- X =< N, mayor(L,N). |
Lo que nos da,
1 2 |
?- mayor([0,1,2,4],5). true. |
1 2 |
?- mayor([0,1,2,4],3). false. |
Ejercicio 1. Realizar un programa en PROLOG que elimine un elemento que se encuentre en la posición N de la lista.