Prolog Predicates & Game AI Algorithms

Classified in Computers

Written on in English with a size of 3.47 KB

funcition min-max(pos,out-eval,out-best_move,in-whomoves,in-max_level){max=-?;min=?;best_move=0;if(level==0){evaluation=eval_(pos);best_move=0; return;}else{foi(i=0;i<num_succ(i);++i){succi=succesor(i);if(whomoves=='max'){min-max(succi,evaluation,best_move,'min', max_level-1);if(evaluation>max){max=evaluation; best_move=i;}}else{min-max(succi,evaluation,best_move,'max', max_level-1);}if(evaluation<min){min=evaluation;best_move=i;}}}}

funcition ??(pos,level,quien_juega,*eval,mejor_move,?,?){if(terminal(pos)||(level==0){*eval=eval(pos);return;}n_succ= num_succ(pos);for(i=0;i<n_succ;++i{if(quien_juega=='max'){succi=succesor(pos,i);??(succi,level-1,'min',evali, mejor_movi,?,?);if(evali>?){?=evali;*eval=?; *mejor_move=i;}if(?>?){break;}}if(quien_juega=='min'){succi=succesor(pos,i);??(succi,level-1,'max',evali, mejor_movi,?,?);if(evali<?){?=evali;*eval=?;*mejor_move=i;}if(?>?){break;}}}}

max(X,X,X):-!.Max(X,Y,X):-X>Y.Max(X,Y,Y):-X<Y.

maxlist([],0):!.Maxlist([X],X):-!.Maxlist([X,Sec|R],Res):-Sec>X,maxlist([Sec|R],Res),!.Maxlist([X,_|R],Res):-maxlist([X|R],Res).

sumlist([],0):!.Sumlist([X],X):-!.Sumlist([X|Res],J):-(J is J+X),sumlist([Res],J).

ordenatu(X,[],[X]).Ordenatu(X,[Y|R],[X,Y|R]):-X<Y. Ordenatu(X,[Y|[]],[Y,X]):-X>=Y.Ordenatu(X,[A|B],[A|L1]):-X>=A,ordenatu(X,B,L1).

between(F,L,F):-F=L,!.Between(F,_,F).Between(F,L,X):-F1 is F+1,between(F1,L,X).

gen_list(X,X,[X]):-!.Gen_list(X,Y,[X|List]):-X<Y,X1 is X+1,gen_list(X1,Y,List).

insert_order(X,[],X).Insert_order(X,[L|R],[X|[L|R]]):-X=<L.Insert_order(X,[L|R],[L|L1]):-X>L,insert_order(X,R,L1).

predecessor(X,Y):-parent(X,Y). Predecessor(X,Y):-parent(X,Z),predecessor(Z,Y).

member(X,[Y|_]):-X=Y.Member(X,[Y|R]):-X\=Y,member(X,R).

num_elem([],0).Num_elem([_|R],N):-num_elem(R,N1),N is N+1.

concat([],L,L).Concat([X],L,[X|L]).Concat([X|R],L,[X|L1]):-concat(R,L,L1).delete(X,[X|R],R).Delete(X,[Y|R],[Y|L1]):-X\=Y,delete(X,R,L1).insert(X,[],[X]).Insert(X,L,[X|L]).iguales([]).Iguales([_]):-!.Iguales([X,X|Xs]):-iguales([X|Xs]).fibo(N, F):-N=0,F=1.Fibo(N, F):-N=1,F=1.Fibo(N,F):-N>1,N1 is N-1, fibo(N1,F1),N2 is N-2,fibo(N2, F2),F is F1+F2.particion(X,[Y|Ys],[Y|Ps],Gs):-Y<X,particion(X,Ys,Ps,Gs).Particion(X,[Y|Ys],Ps,[Y|Gs]):-Y>=X,particion(X,Ys,Ps,Gs).Particion(X,[],[],[]).length([],0).Length([_|Xs],N):-length(Xs,N1),N is N1+1.sum([],0).Sum([X|Xs],S):-sum(Xs,Sc),S is Sc+X.append([],Ys,Ys).Append([X|Xs],Ys,[X|Zs]):-append(Xs,Ys,Zs).split(X,[Y|Ys],[Y|Ps],Gs):-Y<=X,split(X,Ys,Ps,Gs).Split(X,[Y|Ys],Ps,[Y|Gs]):-Y>X,split(X,Ys,Ps,Gs).Split(X,[],[],[]).enqueue(X,[],[X]).Enqueue(X,[Y|R],[Y|R1]):-enqueue(X,R,R1).

Related entries: