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,[Newhead|Newrest]) <- replace_subseq(Board,Oldseq,Newseq,Newhead) & all_replacements(Board,Oldseq,Newseq,Newrest) & no_duplicates([Newhead|Newrest]). 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). no_duplicates([]). no_duplicates([H|T]) <- notmember(H,T) & no_duplicates(T). notmember(X,Y) <- ~member(X,Y). member(H,[H|T]). member(X,[H|T]) <- member(X,T). /* notmember(X,[]). notmember(X,[H|T]) <- X\=H & notmember(X,T). */
Last revised: November 17, 2004