Exercicis resolts de Prolog (LI) (2014)

Apunte Español
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería Informática - 3º curso
Asignatura LI
Año del apunte 2014
Páginas 5
Fecha de subida 06/12/2014
Descargas 3
Subido por

Vista previa del texto

prod([],1).
prod([X|L],P):- prod(L,P1), P is P1*X.
pescalar([],[],0).
pescalar([X|XS],[Y|YS], R) :- pescalar(XS, YS, P), R is (X*Y+P).
pert(X, [X|_]).
pert(X, [_|L]):- pert(X,L).
interseccion([],_,[]).
interseccion([X|L1],L2,[X|L3]):- pert(X,L2),!,interseccion(L1,L2,L3).
interseccion([_|L1],L2, L3 ):- interseccion(L1,L2,L3).
union([],L,L).
union([X|L1],L2, L3):- pert(X,L2),!,union(L1,L2,L3).
union([X|L1],L2,[X|L3]):-union(L1,L2,L3).
union2([], L, L).
union2([X|L1], L2, L3) :- pert(X, L2), union(L1,L2,L3).
union2([X|L1], L2, [X|L3]) :- union(L1,L2,L3).
concat([],L,L).
concat([X|L1], L2, [X|L3]) :- concat(L1,L2,L3).
ultim(L, X):- concat( _,[X],L).
invers([],[]).
invers([X|XS], L):- invers(XS,I), concat( I, [X], L).
fib(1, 1).
fib(0, 1).
fib(X, R):- X1 is X-1, X2 is X-2, fib(X1,F1), fib(X2,F2), R is F1+F2.
dados(0,0,[]).
dados(P,N,[X|XS]) :- N > 0, pert(X,[1,2,3,4,5,6]), Q is P-X, M is N-1, dados(Q,M,XS).
pert_con_resto(X,L,R) :- concat(L1,[X|L2],L), concat(L1,L2,R).
permutacion([],[]).
permutacion(L,[X|P]) :- pert_con_resto(X,L,R), permutacion(R,P).
long([],0).
long([_|L],M) :- long(L,N), M is N+1.
subcjto([],[]).
subcjto([_|C],S) :- subcjto(C,S).
subcjto([X|C],[X|S]) :- subcjto(C,S).
sum([], 0).
sum([X|XS], P):- sum(XS, P1), P is X+P1.
demas(L) :- pert_con_resto(X,L,R), sum(R,X), !.
sumaant(L):- concat(L1, [E|_], L), sum(L1, E).
card(L):- car(L,C), write(C).
car([],[]).
car([X|L],[[x|N1]|CR]):- car(L,C), pert_con_resto([X,N], C, CR), !, N1 is N+1.
car([X|L],[[X,1]|C]):- car(L,C).
esta_ordenat([]).
esta_ordenat([_]).
esta_ordenat([X,X1|L]):- (X =< X1), esta_ordenat([X1|L]).
ordenacio(L1,L2):- permutacion(L1,L2), esta_ordenat(L2).
insercio(X,[],[X]).
insercio(X,[Y|L], [X,Y|L]):- X=<Y.
insercio(X,[Y|L], [Y|L1]) :- X>Y, insercio(X,L,L1).
merge([],[],[]).
merge(L,[],L).
merge([],L,L).
merge([X|L1],[Y|L2],[X|LR]):- X<Y, merge(L1, [Y|L2], LR).
merge([X|L1],[Y|L2],[Y|LR]):- Y<X, merge(L1, [X|L2], LR).
merge([X|L1],[Y|L2],[X|LR]):- Y==X, merge(L1, [Y|L2], LR).
ordena([],[]).
ordena([X],[X]).
ordena([X,Y],[X,Y]):- X=<Y.
ordena([X,Y],[Y,X]):- Y<X.
ordena(L1,L2):- concat(LA, LB, L1), long(LA, N), long(LB, M), D is N-M, (D == 0 ; D == 1), ordena(LA,LAO), ordena(LB,LBO), merge(LAO, LBO, L2).
diccionario(A,N):- nperts(A,N,S), escriure(S), fail.
nperts(_,0,[]):-!.
nperts(L,N,[X|S]):- pert(X,L), N1 is N-1, nperts(L,N1,S).
escriure([]):-nl.
escriure([X|L]):- write(X), escriure(L).
%Escribe un predicado %palındromos(L) que, dada una lista de letras L, %es ri a todas las permuta iones de sus elementos que sean pal ındromos ( api uas) %Ejemplo: palindromos([a,a,c,c]) escribe [a,c,c,a] y [c,a,a,c].
palindromos(L):- long(L, N), diccionario(L, N), esPal(L), write(L), false.
palindromos.
esPal(L):- reverse(L,R), L == R.
reverse([],[]). %reverse of empty is empty - base case reverse([H|T], RevList):- reverse(T, RevT), conc(RevT, [H], RevList). %concatenation suma([],[],[],C,C).
suma([X1|L1],[X2|L2],[X3|L3],Cin,Cout) :X3 is (X1 + X2 + Cin) mod 10, C is (X1 + X2 + Cin) // 10, suma(L1,L2,L3,C,Cout).
send_more_money1 :L = [S, E, N, D, M, O, R, Y, _, _], permutacion(L, [0,1,2,3,4,5,6,7,8,9]), suma([D, N, E, S], [E, R, O, M], [Y, E, N, O], 0, M), write('S = '), write(S), nl, write('E = '), write(E), nl, write('N = '), write(N), nl, write('D = '), write(D), nl, write('M = '), write(M), nl, write('O = '), write(O), nl, write('R = '), write(R), nl, write('Y = '), write(Y), nl, write(' '), write([S,E,N,D]), nl, write(' '), write([M,O,R,E]), nl, write('-------------------'), nl, write([M,O,N,E,Y]), nl.
Powered by TCPDF (www.tcpdf.org) ...