Sunteți pe pagina 1din 3

3.3 Listas y recursividad. Las listas son recursos para agrupara datos (como predicados sin factor). Ejm.

[] %lista vacia [a,b] %lista con 2 terminos constantes, es una lista cerrada Una lista es un termino en un predicado. Ejm. cliente(100,[Luis,De la Cruz,Sanchez],408.60). ?-cliente(100,X,_),nl,write(X). [Luis,De la Cruz, Sanchez] yes p1([]):-write(La lista es vacia). ?-p1([]). La lista es vacia ?-p1(X),nl,write(X). La lista es vacia []yes p2([a,b,c]). ?-p2(X). %X/[a,b,c] yes ?-p2([a,b]) no ?-p2([_,b,_]) yes ?-p2([X,_,Y]),write(X),write(Y). acyes ?p2([X]). no ?-p2([X,Y,Z]). Yes Hay una forma especial para unificar listas (tambin para construirlas): [X|Z] p3([P|R]):-write(P),nl,write(R). ?-p3([a,b,c]). a [b.c] yes p4 ([P,S|R]):- write(P),nl,write(S),nl,write(R). %en P guarda un valor de la lista en S %otro y en R el resto de lo que hay en la lista ?-p4([1,2,3,4,5,6,7]) 1 2 [3,4,5,6,7]

?-p4([[a,b],2,3,4,5]). [a,b] 2 [3,4,5] ?-p4([a,b]). a b []yes Las listas reducen el largo de los programas prolog, evitan la necesidad de los predicados del mismo factos y diferente largo. Ejm. var(corren,[2,3],P). ?-var(corren,X,P),member(3,X). first([X|_],X). ?-first([a,b,c],R)nl,write(R),nl. a yes ?-first([],R),write(R),nl. -1 yes second([X,Y|_],Y). ?second([1,2,3],R),write(R),nl.) 2 yes rest([],[]). rest([_|R],R). ?-L:=[a,b,c],rest(L,R),write(R),nl. [b,c] yes Y permiten reducir cdigo a travs de predicados recursivos %Largo de una lista lar([],0):-!. lar([P|R],Res):-lar(R,Res),Res:=Res+1. %estas dos anteriores son un OR(dos ramas) ?-lar([a,b,c],R),write(R),nl. 3 yes

%el ultimo de la lista. last([],[]). %para que cuando la lista este vacia regrese la misma lista vacia last([X],X):-!. last([P|R],Res):-last(R,Res). ?-last([a,b,1,3,ana,4,Rita,[carlos,lopez]],R),write(R),nl. [carlos,lopez] yes ?-last([],Res),write(R),nl. [] yes

S-ar putea să vă placă și