Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > Prolog > Eliminar dato en Prolog
-Foros de debate

Prolog
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Eliminar dato en Prolog
Enviado por RoYeR el día 23 de mayo de 2008

Hola, ojala alguien me pueda ayudar, tengo que hacer un programa k elimine un dato preguntando al programa de esta manera ?elimina([a,b,c,d,e],2,x)
la constante es el que dice que dato va a eliminar en este caso el num. 2 va a eliminar a b y el resultado es
x=[a,c,d,e] yo por mi parte ya lo he intentado hacer pero algo tengo mal, ojala que alguien se tome un poco de su tiempo para ayudarme, gracias!!!

 
Re: Eliminar dato en Prolog
Enviado por Otto87 el día 30 de mayo de 2008

mmm pues seria algo asi

elimina(L,N):-
eliminaAux(L,N,[],X,1).
write(X).

eliminaAux([],N,L2,L2,C).

eliminaAux([Cab|Col],N,L2,X,C):-
=:=(C,N)
is(C2,+(C,1)),
eliminarAux(Col,N,L2,X,C).

eliminaAux([Cab|Col],N,L2,X,C):-
=\\=(C,N),
is(C1,+(C,1)),
eliminarAux()
is(C1,+(C,1)),
eliminarAux(Col,N,[Cab|L2],X,C1).

medio te explico vos haces la consulta ?elimina([a,b,c,d],2,X).

la primera clausula llama a elimnarAux q tiene como argumentos

L - es la lista q mandas
N- es la posicion del elemento q queres eliminar
L2- es una lista vacia donde vamos a crear la nueva lista sin el elemento que querias
X- es donde vamos a guardar la lista final.
C- es un contador inicializado en 1 para ver en q posicion vamos

la segunda clausula es la condicion de paro de la recursion, basicamente te dice q cuando la lista este vacia, q copie L2 y lo meta en X. (haces esto por q cuando la recursion acaba L2 sera destruida).

la tercera clausula es donde sacas el termino q no queres
osea q C el contador sea igual a N la posicion que queres eliminar, separa L en cabeza y cola, y cuando hace la recursion mandas SOLO la cola dejando la cabeza fuera q era el termino q no querias

en la cuarta simplemente te dice q mientras el contador no sea iigual la posicion deseada , q le aunmente 1 al contador y mande la cola a segir caminando y meta la cabeza a la lista vacia.

EL unico inconviente es q la lista viene al revez, por ejemplo tu querias eliminar B, esto te va a devolver [D,C,A
pero solo aplicas un REVERSE a X al final de todo y te lo da normal.

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network