:- op(100, xfx, of). :- dynamic cards/0. :- dynamic suit/1. :- dynamic rank/1. suit(spades). suit(hearts). suit(clubs). suit(diamonds). rank(ace). rank(2). rank(3). rank(4). rank(5). rank(6). rank(7). rank(8). rank(9). rank(10). rank(jack). rank(queen). rank(king). cards:- suit(S), % 1 rank(R), % 2 assert(R of S), fail. cards. :- op(100, xfx, above). ace above king. king above queen. queen above jack. jack above 10. X above Y:- succ(Y, X). succ(2,3). succ(3,4). succ(4,5). succ(5,6). succ(6,7). succ(7,8). succ(8,9). succ(9,10). :- op(100, xfx, beats). X beats Y:- % 4 X above Y. % 5 X beats Y:- % 6 X above Z, % 7 Z beats Y. % 8 member(X, [X|_]). member(X, [_|L]):- member(X, L). :- op(100, xfx, beatsall). _ beatsall [] . X beatsall [H|T]:- X beats H, X beatsall T. go:- % 9 rank(R), % 10 write('--------------------'), nl, R beats B, % 11 write(R beats B), nl, % 12 fail. go. % 13