% Author:RL % Date: 04/10/2016 colours([red,blue,orange, plaid]). names([fred,joe, bob, tom]). positions([1,2,3,4]). % golfer(Name,Position,Colour) go :- positions(Ps), colours(Cs), pick(P1, Ps, Ps1), pick(C1, Cs, Cs1), G1 = golfer(fred, P1, C1), pick(2, Ps1, Ps2), pick(C2, Cs1, Cs2), G2 = golfer(joe, 2, C2), pick(P3, Ps2, Ps3), pick(plaid, Cs2, Cs3), G3 = golfer(bob, P3, plaid), pick(P4, Ps3, _), pick(C4, Cs3, _), G4 = golfer(tom, P4, C4), asserta(G1), asserta(G2), asserta(G3), asserta(G4), ( golfer(fred, X, _), Y is X+1, golfer(_, Y, blue), golfer(tom, Pos, Col), Pos =\= 1, Pos =\= 4, Col \== orange ; clear(G1,G2,G3,G4), fail), write(G1), nl, write(G2), nl, write(G3), nl, write(G4), nl, clear(G1,G2,G3,G4). clear(G1,G2,G3,G4) :-retract(G1), retract(G2), retract(G3), retract(G4). pick(X, [X|T], T). pick(X, [H|T], [H|T2]) :- pick(X, T, T2).