Prolog - Listas en Prolog

 
Vista:

Listas en Prolog

Publicado por Karina (1 intervención) el 24/03/2004 08:15:10
Necesito hacer una lista en prolog...partirla y que sus sublistas puedan "juntarse" y volver a hacer la lista...o algo así, alguien sabe como hacerlo?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Listas en Prolog

Publicado por Lucas (3 intervenciones) el 04/05/2004 03:02:21
Hola!
Te cuento que las listas en prolog son asi>
Domains
nodo = symbol
lista = nodo*

dspues, se agarra y se ponen entre corchetes [ ], esto es una lista vacia...
[ X | Xs ] significa que X es el primer elemento de la lista, y Xs son el resto de la lista (otra lista!!!!).... se les sule llamar cabeza y cola....
bueno no se para ir recorriendo una lista y separarla en dos pode hacer as>\:

separa( [ ], _, _ ) : - !.
separa( [ X | Xs ], Ys , Zs ) : - X>100, !
separa( Xs, [ X | Ys], Zs).
separa( [ X | Xs ], Ys, [ X | Zs ] ) : - separa( Xs, Ys, [ X | Zs] ).

bueno esto lo que hace, dada una lista te devuelve en la segunda los mayores a 100 y los menores o iguales en la tercera...

espero te sirva
saludos!
Lucas

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por Luis Alonso Sevilla (1 intervención) el 03/07/2015 16:33:27
1. Se ingresa una lista que puede ser de numeros(enteros, decimales), symbol, caracteres. Ejm: L=[6,7,8,9,5,3]

a) calcula la longitud. ejm: lon=6
b)elimina un valor dado la posición. ejm: pos=4 eliminará 9 y la lista queda así [6,7,8,5,3]
c)intercambia
Posa=2--->7
Posb=5--->3
quedando
L=[6,3,8,5,7]

Estas en linea ahora? Necesito ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

todo lo que tenga que ver con Listas en Prolog

Publicado por julian vargas (1 intervención) el 04/11/2005 22:03:58
hola necesito un favorsito , necesito saber todo lo que tenga que ver con Listas en Prolog gracias feliz dia julian
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Listas en Prolog

Publicado por Yadisleyvis (1 intervención) el 11/10/2006 22:33:13
/* suma de los elementos de una lista */
total([],0).
total([C|L],T):-
total(L,T1),
T is T1+C.

/* longitud de una lista */
lenght([],0).
lenght([_|L],T):-
lenght(L,T1),
T is T1+1.

/* adicionar un elemento de la cabeza de una lista */
addhead(X, L, [X|L]).

/* borrar la cabeza de una lista*/
deletehead(L,L1):-
addhead(_,L1,L).

/* adicionar al final de una lista */
addend(X, [], [X]).
addend(X, [C|R], [C|R1]):-
addend(X, R, R1).

/* borrar el ultimo elemento de una lista */
deleteend(L,L1):-
addend(_,L1,L).

/* borrar un elemento de una lista dado el indice */
delete(Indice,L,L1):-
insert(_,Indice,L1,L).

/* insertar un elemento en una lista dado el indice en que se quiere insertar*/
insert(X,0,L1,[X|L1]).
insert(X,Pos,[C|R],[C|R2]):-
Pos1 is Pos-1,
insert(X,Pos1,R,R2).

/* devuelve las posiciones en que se encuentra un elemento X*/
pos(X,[X|_],0).
pos(_,[],_):-
!,fail.
pos(X,[_|R],Pos):-
pos(X,R,Pos1),
Pos is Pos1+1.

/* clonar lista*/
clonlist([], []).
clonlist([C|R], [C|R1]):-
clonlist(R, R1).
/* elemento X de una Lista*/
getElem(0,[C|_],C):-!.
getElem(X,[_|R],Sol):-
X1 is X -1,
getElem(X1,R,Sol)
.

/* existencia de un elemento en una lista */
existe(_,[]):-fail.
existe(X,[X|_]):-!.
existe(X,[_|R]):-
existe(X,R).

/* elminar un elemento de la lista */
eliminar(_,[],[]):-fail.
eliminar(X,[X|R],R).
eliminar(X,[C|R],[C|R1]):-
eliminar(X,R,R1)
.

/* subconjuntos de una lista */
subconjunto([],[]).
subconjunto([C|R],[C|R1]):-
subconjunto(R,R1).
subconjunto(L,[_|R1]):-
subconjunto(L,R1).

/* permutaciones de una lista*/
permutaciones([],[]).
permutaciones([C1|R1],L):-
eliminar(C1,L,Rest),
permutaciones(R1,Rest).

/* laboratorio */
vacia([]).
subcPerm(L,L1):-
subconjunto(T,L1),
permutaciones(L,T)
.

check([],[],A,A).
check([C|R],[+C|R1],SumaTemp,Suma):-
M is SumaTemp + C,
check(R,R1,M,Suma)

.
check([C|R],[-C|R1],SumaTemp,Suma):-
M is SumaTemp - C,
check(R,R1,M,Suma)
.

lab(ListaLarga,Suma,[C|R1]):-
subcPerm([C|R],ListaLarga),
check(R,R1,C,Suma)
.

/* invertir una lista*/
invertir([],[]).
invertir([C|R],L):-
invertir(R,X),
addend(C,X,L).

/* mayor de una lista */
mayor([C|[]],C):-!.
mayor([C|R],C1):-
mayor(R,C2),
C>C2 ,
C1 is C,!.
mayor([_|R],C1):-
mayor(R,C1)
.

/* menor de una lista */
menor([C|[]],C):-!.
menor([C|R],C1):-
menor(R,C2),
C<C2 ,
C1 is C,!.
menor([_|R],C1):-
menor(R,C1)
.

/* sublistas de una lista*/
prim([],_).
prim([C|R],[C|R1]):-
prim(R,R1)
.
sublista([],[]).
sublista([C|R],[C1|R1]):-
prim([C|R],[C1|R1]);
sublista([C|R],R1)
.

/* verifica si una lista es creciente*/
creciente([_|[]]).
creciente([C|[C1|R1]]):-
C < C1,
creciente([C1|R1])
.

/* calcula los intervalos crecientes de una lista */
intervalosCrec(Inter,L):-
sublista(Inter,L),
creciente(Inter)
.

may(Inter,L, Long):-
( intervalosCrec(Inter,L),lenght(inter,Long) );
( Long1 is Long -1,may(Inter,L,Long1) )
.

l(Inter,L):-
lenght(L,M);
may(Inter,L,M)
.
/* producto de 2 vectores */
prodEscalar([],[],0).
prodEscalar([C|R],[C1|R1],Result):-
prodEscalar(R,R1,Result1),
Result is C * C1 + Result1
.
/* cantidad columnas de una matriz */
cantCol([C|_],CC):-
lenght(C,CC)
.

/* cantidad filas de ina matriz */
cantFil(L,CF):-
lenght(L,CF)
.

/* columna Num de una matriz [C|R] */
getCol([],_,[]).
getCol([C|R],Num,[C1|R1]):-
getElem(Num,C,C1),
getCol(R,Num,R1)
.
/* fila Num de una matriz [C|R] */
getFil(L,Num,L1):-
getElem(Num,L,L1)
.

/* multiplicar matrices */
crearFila(_,Col,[],_,M2):-
cantCol(M2,Cant), Cant= Col,!
.

crearFila(Fil,Col,[C|R],M1,M2):-
getFil(M1,Fil,Fila),
getCol(M2,Col,Columna),
prodEscalar(Fila,Columna,C),
ColTemp is Col +1, crearFila(Fil,ColTemp,R,M1,M2)
.

mult(Fil,[],M1,_):-
cantFil(M1,Cant),Cant= Fil,
!.
mult(Fil,[C|R],M1,M2):-
crearFila(Fil,0,C,M1,M2),
FilTemp is Fil +1,
mult(FilTemp,R,M1,M2)
.

multiplicar(M1,M2,M):-
mult(0,M,M1,M2)
.
/* cantidad que se repite X en una lista*/
cantRep(_,[],0).

cantRep(X,[X|R],Cant):-
cantRep(X,R,Cant1),
Cant is Cant1+1,!.
cantRep(X,[_|R],Cant):-
cantRep(X,R,Cant)
.

/* jkkjhk no pincha */

mayr([X],1,X).

mayr([C|R],Cant,Elem):-
cantRep(C,[C|R],Cant1),
mayr(R,Cant2,Elem1),
(((Cant1>= Cant2) ,(Cant is Cant1,Elem is C)) ;( Cant is Cant2 , Elem is Elem1))
.
/* concatenar dos listas */

concat([],L,L).
concat([C|R],L,[C|R1]):-
concat(R,L,R1)
.

/* obtener todos los elementos atomicos de una lista de listas de listas de... */
flatten([],[]):-!.
flatten([C|R],L):-
flatten(C,L1),
flatten(R,L2),
concat(L1,L2,L),!
.
flatten(X,[X]).

/* suma de matrices */
crearfila([],[],[]).
crearfila([C|R],[C1|R1],[C2|R2]):-
C2 is C + C1,
crearfila(R,R1,R2)
.
sumaMat([],[],[]).
sumaMat([C|R],[C1|R1],[C2|R2]):-
crearfila(C,C1,C2),
sumaMat(R,R1,R2)
.
/* elemento de una matriz */
elemMat(Fila,Col,[C|R],X):-
getElem(Fila,[C|R],L),
getElem(Col,L,X)
.

/* sobreescribir un elemento en una lista */
sobreescribirEn(_,_,[],[]).
sobreescribirEn(Elem,0,[_|R],[Elem|R1]):-
sobreescribirEn(Elem,-1,R,R1),!
.
sobreescribirEn(Elem,Pos,[C|R],[C|R1]):-
ColTemp is Pos -1,
sobreescribirEn(Elem,ColTemp,R,R1)
.

/* sobreescribir un elemnto en una matriz */

sobreescribirMat(_,_,_,[],[]):-!.
sobreescribirMat(0,Col,Elem,[C|R],[C1|R1]):-
sobreescribirEn(Elem,Col,C,C1), FilTemp is -1,
sobreescribirMat(FilTemp,Col,Elem,R,R1),!
.
sobreescribirMat(Fil,Col,Elem,[C|R],[C|R1]):-
FilTemp is Fil - 1,
sobreescribirMat(FilTemp,Col,Elem,R,R1)
.

/* intercambiar elemntos de una matriz */
exchange(pto(Fila1,Col1),pto(Fila2,Col2),[C|R],[C1|R1]):-
elemMat(Fila1,Col1,[C|R],Pos1),
elemMat(Fila2,Col2,[C|R],Pos2),
sobreescribirMat(Fila1,Col1,Pos2,[C|R],M),
sobreescribirMat(Fila2,Col2,Pos1,M,[C1|R1])
.



/* sublistas de una lista*/
prim3([C,C1,C2|[]],[C,C1,C2|_]).

sublista3([],[]).
sublista3([C|R],[C1|R1]):-
prim3([C|R],[C1|R1]);
sublista3([C|R],R1)
.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por Tony (1 intervención) el 20/05/2007 18:35:27
Hola, me parece que tu código no es correcto del todo. Por ejemplo:

insert(9,Y,[a,b,c,d,e,f],[a,b,c,9,d,e,f]).

Debería devolver que Y=3, en cambio dice: {ERROR: illegal arithmetic expression}

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por extraño (1 intervención) el 04/06/2007 06:27:50
que buen aporte, Gracias. tengo una duda ¿es posible hacer un recorrido mostrando los elementos de la lista en pantalla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por jhampier (1 intervención) el 17/10/2007 23:14:45
imprimir([]):-!.
imprimir([CABEZA|CUERPO]):-write(CABEZA,"\n"),imprimir(CUERPO).

para imprimir es solo esto :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por metz (1 intervención) el 19/10/2007 00:59:12
hola me gustaria saber como hacer para...
dar una lista nuerica y fuera de ella uno (X) numero y que te regrese una lista donde te de los menores de x
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por maría (4 intervenciones) el 29/01/2008 18:59:38
Hola
en el predicado que elimina un elemento de la lista, sólo lo elimina 1 vez; cómo sería para que lo elimine todas las veces que aparece en la lista?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por rafa (1 intervención) el 14/03/2008 23:37:32
aki tines man
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por hiola (1 intervención) el 26/05/2010 05:16:25
hola mundo :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por german (2 intervenciones) el 27/09/2008 19:12:00
No sabes lo bien que me vino esta listita de programas, que son sencillos y de mucho uso, me salvaste la vida, tengo que aprender prolog en solo dos meses y esto me vino de diez!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por Victor Gonzalez (1 intervención) el 07/07/2009 01:04:22
sumCombs(Xss,V):- V es la suma de todas las representaciones decimales de las listas obtenidas mediante las combinaciones
? sumCombs([[1,2,3],[4,5],[6]],V).
V = 1506

Esto como se haria en Prolog
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listas en Prolog

Publicado por morena (1 intervención) el 14/05/2010 06:19:43
como hacer un programa en prolog que borre un elemento de una lista todas las veces que se encuentre dicho elemento en ella.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Listas en Prolog

Publicado por Maguito (1 intervención) el 28/09/2011 02:14:46
Gracias a esta Web y gente como vosotros
es posible seguir Creciendo y Aprendiendo

Un Saludo muy especial para todos los que anonimamente dejan aquí parte de sus conocimientos y también para toda la gente linda que la visita.

El Maguito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar