%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % hanoi(nombre de discs, pal origen, pal_desti, pal_intermig) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hanoi(1,A,B,_,[passade_a_(A,B)]):-!. hanoi(SN,A,B,C,Mov):- N is SN-1, hanoi(N,A,C,B,M1), hanoi(N,C,B,A,M2), append(M1,[passade_a_(A,B)|M2],Mov). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % hanoi2(nombre de discs, pal origen, pal_desti, pal_intermig) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ara utilitzarem memorització de resultats utils % El predicat predefinit dynamic(P) ens converteix el predicat P amb dinamic, % per tant, permetrem assert, retract... :-dynamic(hanoi2/5). hanoi2(1,A,B,_,[passade_a_(A,B)]):-!. hanoi2(SN,A,B,C,Mov):- N is SN-1, memoritza(hanoi2(N,A,C,B,M1)), hanoi2(N,C,B,A,M2), append(M1,[passade_a_(A,B)|M2],Mov). memoritza(P):- P, asserta((P:-!)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Aquests serien els possible "programes" que contenen predicats per a veure el % temps d'execucio. % q:- statistics(runtime,_), % hanoi2(13,a,b,c,L), % statistics(runtime, [_,T]), % write(L), % nl, % write(T) . % p:- statistics(runtime,_), % hanoi(13,a,b,c,L), % statistics(runtime, [_,T]), % write(L), % nl, % write(T) . % El predicat predefinit initialization(X), ens permet indicar quin es el % predicat que es vol satisfer en l'executable. % :-initialization(p). % :-initialization(q). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % EXEMPLE DE MENU AMB FD (Constraints) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fermenu(minim):-fd_minimize(menulleuger(Pri, Sec, Post,T),T),write(Pri),nl, write(Sec), nl,write(Post),nl, write(T). fermenu(maxim):-fd_maximize(menulleuger(Pri, Sec, Post,T),T),write(Pri),nl, write(Sec), nl,write(Post),nl, write(T). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % menulleuger( primerplat, segonplat, postres, suma_total_de_calories) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% menulleuger(Pri, Sec, Post, T):- I #>0, J #>0, K #>0, I+J+K #=< 8, primer(Pri, I), segon(Sec, J), postres(Post, K), T is I+J+K. primer(pasta,5). primer(amanida,1). segon(M,I):- carn(M,I). segon(M,I):- peix(M,I). postres(fruita,2). postres(gelat,5). carn(pollastre,3). carn(porc, 6). peix( lluc,3). peix( rap,5).