gen_all_moves(X,Movelist) :- gen_all_blue_moves(X,Bluemoves) , gen_all_red_moves(X,Redmoves) , append(Bluemoves,Redmoves,Movelist). gen_all_blue_moves(X,Bluemoves) :- gen_all_blue_slides(X,Blueslides) , gen_all_blue_jumps(X,Bluejumps) , append(Blueslides,Bluejumps,Bluemoves). gen_all_red_moves(X,Redmoves) :- gen_all_red_slides(X,Redslides) , gen_all_red_jumps(X,Redjumps) , append(Redslides,Redjumps,Redmoves). gen_all_blue_slides(Board,Newboards) :- all_replacements(Board,[b,-],[-,b],Newboards). gen_all_blue_jumps(Board,Newboards) :- all_replacements(Board,[b,r,-],[-,r,b],Newboards). gen_all_red_slides(Board,Newboards) :- all_replacements(Board,[-,r],[r,-],Newboards). gen_all_red_jumps(Board,Newboards) :- all_replacements(Board,[-,b,r],[r,b,-],Newboards). all_replacements(Board,Oldseq,Newseq,Y) :- bagof(X,replace_subseq(Board,Oldseq,Newseq,X),Y). all_replacements(Board,Oldseq,Newseq,[]). replace_subseq(Oldseq,Oldsubseq,Newsubseq,Newseq) :- append(L1,L2,Oldseq) , append(Oldsubseq,L3,L2) , append(Newsubseq,L3,L4) , append(L1,L4,Newseq). append([],Z,Z). append([A|X],Y,[A|Z]) :- append(X,Y,Z).
Last revised: November 17, 2004