Ir al contenido principal

Prolog - Ejemplos de Listas

Comparto el material de estudio antes de un Examen de Prolog.

  • % insertar un entero al inicio de la lista
insertarInicio(X,L,[X|L]).
  • % Insertar un elemento al final de una lista
insertarFinal(X,[],[X]).
insertarFinal(X,[L|Ls],[L|R]):-insertarFinal(X,Ls,R).
  • % Insertar un entero en una lista de enteros indicandole la posicion
insertar(E,[X|Xs],1,L):- L=[E,X|Xs],write("Fin"),nl,!.
insertar(E,[X|Xs],P,L):- N1=P-1,write(N1),nl,insertar(E,Xs,N1,L1),L=[X|L1].
  • % Buscar un elemento en una lista
pertenece(X,[X|_]):-!.
pertenece(X,[_|Xs]):-pertenece(X,Xs).
  • % Eliminar un elemento de una lista
eliminar(X,[X|Xs],Xs):-!.
eliminar(X,[Y|Ys],[Y|Lr]):-eliminar(X,Ys,Lr).
  • % Eliminar ocurrencias de un elemento en una lista
eliminarOcurrencias(_,[],[]):-!.
eliminarOcurrencias(X,[X|Xs],Ys):- eliminarOcurrencias(X,Xs,Ys),!.
eliminarOcurrencias(X,[Y|Ys],[Y|Lr]):-eliminarOcurrencias(X,Ys,Lr).
  • % Determina si todos los elementos de una lista son iguales
iguales([]).
iguales([_]):-!.
iguales([X,X|Xs]):-iguales([X|Xs]).
  • % Concatenar 2 listas
concatenar(L,[],L).
concatenar(L,[X|Xs],R):-insertarFinal(X,L,L2), concatenar(L2,Xs,R).
  • % Retornar enesimo elemento de una lista
% lista, posicion, elemento
enesimo([X|_],1,X).
enesimo([_|Xs],N,E):-N1 = N-1, enesimo(Xs,N1,E).
% Eliminar los elementos de una lista que estan en las posiciones dadas
% por los elementos de otra lista de enteros
% ListaElemen, PosActual, Lista posic, ListaRes
eliminarUnaPos([],_,_,[]).
eliminarUnaPos([_|Hs],P,Lp,Lr):- pertenece(P,Lp), P1 = P+1, eliminarUnaPos(Hs,P1,Lp,Lr),!.
eliminarUnaPos([H|Hs],P,Lp,[H|Lr]):- P1 = P+1, eliminarUnaPos(Hs,P1,Lp,Lr).
eliminarElemenLista(Le,Lp,Lr):-eliminarUnaPos(Le,5,Lp,Lr).
  • % Unir dos listas en el sentido de Conjuntos
% Lista A, Lista B, Union A,B
unirListas(L1,[],L1).
unirListas(L1,[X|Xs],R):- not(pertenece(X,L1)), unirListas([X|L1],Xs,R),!.
unirListas(L1,[_|Xs],R):- unirListas(L1,Xs,R).
  • % Diferencia de dos listas en el sentido de conjuntos
% Lista A, Lista B, Diferencia A-B
diferenciaListas([],_,[]).
diferenciaListas([X|Xs],L,[X|Lr]):-not(pertenece(X,L)),diferenciaListas(Xs,L,Lr),!.
diferenciaListas([_|Xs],L,Lr):-diferenciaListas(Xs,L,Lr).
  • %Invertir una lista
invertir2([],L,L).
invertir2([X|Xs],L,Lf):-L1=[X|L], invertir2(Xs,L1,Lf).
invertir2(L,Lf):-invertir2(L,[],Lf).

Codigo testeado en swi-prolog y Visual Prolog

Comentarios

  1. Excelente aporte. Muchas gracias!

    ResponderEliminar
  2. Falta es una buena explicacion de cada uno xD.. pero se agradece el aporte

    ResponderEliminar
  3. no sale la respuesta les falta explicar mejor

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Debugging Remoto con Eclipse + WebSphere 7 + Maven

Tienes proyectos java en Maven y no puedes ubicar bugs fácilmente a falta de junit. Sin embargo, existe la alternativa de debugear la aplicación web a través de Java Debugger (jdb). Aquí les muestro una guía de como hacer un debug remoto de la aplicación web en Eclipse y WebSphere 7 a través de Java Debugger (JDB). Eclipse <----> Java Debugger (jdb) <----> WebSphere 7 1. Habilitar el WebSphere en modo Debug. Para esto seguir los siguientes pasos:  1. Servers –> Server Types –> WebSphere application servers 2. Under Server Infrastructure section –> expandir Java and Process Management –> Process definition 3. dentro de la seccion Additional Properties –> click Java Virtual Machine 4. clic en el check “Debug Mode” 5. En texbox Debug arguments, poner este valor:  -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 6. Reiniciar el servidor WebSphere. Ahora, WebSphere se inicia en modo debug, y escuchando en el pu

Java POI HSSFCell : añadir comentario en una celda

POI HSSFComment: Una manera simple de añadir un comentario en una celda de excel usando el metodo cell.setCellComment(). public class ExcelTools { public static void main(String[] args){ //escribirExcel(); //leerExcel(); validarValoresDuplicadosLista(); System.out.println("Ejemplo Finalizado."); } public static void escribirExcel(){ try{ //Se crea el libro Excel HSSFWorkbook wb = new HSSFWorkbook(); //Se crea una nueva hoja dentro del libro HSSFSheet sheet = wb.createSheet("HojaEjemplo"); //Se crea una fila dentro de la hoja HSSFRow row = sheet.createRow((short)0); HSSFPatriarch patr = sheet.createDrawingPatriarch(); //Creamos celdas de varios tipos row.createCell((short)0).setCellValue(1); row.createCell((short)1).setCellValue(1.2); row.createCell((short)2).setCellValue("ejemplo&

DB2 Error SQL20054N

Ejecutando un alter table me da el  siguiente error: db2 "ALTER TABLE PRG_REC.ESTIMADO_OBJETIVO DROP COLUMN VTA_OBJ_CAMP_FALTA_EXTRANJERA"; Error:  [db2inst1@ibmdb2test]:/home/db2inst1/1223/REQ1223/rollback$ db2 "ALTER TABLE PRG_REC.ESTIMADO_OBJETIVO DROP COLUMN VTA_OBJ_CAMP_FALTA_EXTRANJERA"; DB21034E  The command was processed as an SQL statement because it was not a valid Command Line Processor command.  During SQL processing it returned: SQL20054N  The table "PRG_REC.ESTIMADO_OBJETIVO" is in an invalid state for the operation.  Reason code="23" .  SQLSTATE=55019 Segun IBM la descripcion del error: SQL20054N:  La tabla   nombre-tabla   está en un estado no válido para la operación. Código de razón= código-razón . 23 Se ha realizado el número máximo de modificaciones recomendadas de REORG. Se permite un máximo de tres modificaciones recomendadas de REORG en una tabla antes de que se deba realizar reorg, para actualizar las fila