miércoles, 23 de enero de 2008

Longitud, Ocurrencia, Posicion y Concatenar Listas en Lenguaje Prolog

/*Ejercicio2): Defina un predicado longitud(L,N) el cual es válido si N contiene la longitud de la lista L*/
longuitud([],0).
longuitud([_|A],N):- longuitud(A,B), N is B+1.

/*Ejercicio3): Defina un predicado ocurrencia(X,L,N) el cual es válido si el elemento X aparece N veces en la lista L*/
ocurrencia(_,[],0).
ocurrencia(X,[A|C],N):- X\=A, ocurrencia(X,C,N).
ocurrencia(X,[A|C],N):- X=A, B is N-1, ocurrencia(X,C,B).

/*Ejercicio4): Defina un predicado posicion(N,L,X) el cual es válido si X es el elemento que ocupa la posición N de la lista L*/
posicion(1,[A|_],A).
posicion(N,[_|B],A):- Aux is N-1, posicion(Aux,B,A).

/*Ejercicio5): Defina un predicado concatena(L, M, N) el cuál es válido si la lista N es la concatenación de las listas L y M*/
concatena([],L,L).
concatena([_|A],M,[_|N]):- concatena(A,M,N).

2 comentarios:

aquiles dijo...

hola amigo:

tienes un problema en la posicion, recuerde que prolog compila de arriba hacia abajo y de izquierda a derecha, el error es:

Arguments are no sufficiently instantied

el codigo deberia ser asi:

get_pos(E,[E|_],1).
get_pos(E,[_|C],P):- get_pos(E,C,P1),P1 is P - 1.

saludos

Aquiles dijo...

perdon deberia ser asi:

%obtener posicion de un elemento en una lista comenzamos por 0
get_pos(E,[E|_],0).
get_pos(E,[_|C],P):- get_pos(E,C,P1), P is P1 + 1.