% struct s(Color,Nationality,Drink,Shell,Bird) init(L):- L=[s(_,norwegian,_,_,_), s(blue,_,_,_,_), s(_,_,brandy,_,_), s(_,_,_,_,_), s(_,_,_,_,_)],!, setcolor(L,[red,green,brown,yellow]), rightof(s(green,_,_,_,_),s(brown,_,_,_,_),L), setnat(L,[englishman,pole,irishman,fin]), chksame(L,s(red,englishman,_,_,_)), setdrink(L,[bourbon,beer,gin,scotch]), chksame(L,s(green,_,bourbon,_,_)), chksame(L,s(_,fin,beer,_,_)), setshell(L,[winchester,remington,western,peters,federal]), chksame(L,s(yellow,_,_,remington,_)), chksame(L,s(_,_,gin,western,_)), chksame(L,s(_,irishman,_,peters,_)), setbird(L,[bluebills,mallards,redheads,canvasbacks,teal]), chksame(L,s(_,pole,_,_,bluebills)), chksame(L,s(_,_,_,winchester,mallards)), nextto(s(_,_,_,federal,_),s(_,_,_,_,redheads),L), nextto(s(_,_,_,remington,_),s(_,_,_,_,canvasbacks),L). setcolor([],[]). setcolor([s(C,N,D,S,B)|L],L1):- del(C,L1,L2),setcolor(L,L2). setcolor([X|L],L1):- setcolor(L,L1). setnat([],[]). setnat([s(C,N,D,S,B)|L],L1):- del(N,L1,L2),setnat(L,L2). setnat([X|L],L1):- setnat(L,L1). setdrink([],[]). setdrink([s(C,N,D,S,B)|L],L1):- del(D,L1,L2),setdrink(L,L2). setdrink([X|L],L1):- setdrink(L,L1). setshell([],[]). setshell([s(C,N,D,S,B)|L],L1):- del(S,L1,L2),setshell(L,L2). setshell([X|L],L1):- setshell(L,L1). setbird([],[]). setbird([s(C,N,D,S,B)|L],L1):- del(B,L1,L2),setbird(L,L2). setbird([X|L],L1):- setbird(L,L1). chksame([],_):- !,fail. chksame([H|T],H). chksame([H|T],X):- chksame(T,X). nextto(X,Y,[X,Y|T]). nextto(X,Y,[Y,X|T]). nextto(X,Y,[Z|T]):- nextto(X,Y,T). rightof(X,Y,[X,Y|T]). rightof(X,Y,[Z|T]):- rightof(X,Y,T). del(X,[X|T],T). del(X,[Y|T],[Y|L]):-del(X,T,L).