pokerHand([X,X,X,X,X], R, 'Royal flush') :- permutation(R, ['T','J','Q','K','A']). pokerHand([X,X,X,X,X], R, 'Straight flush') :- sub_atom('A23456789TJQK', _, 5, _, A), atom_chars(A, P), permutation(R, P). pokerHand([X,X,X,X,X], _, 'Flush'). pokerHand(_, R, 'Straight') :- sub_atom('A23456789TJQKA', _, 5, _, A), atom_chars(A, P), permutation(R, P). pokerHand(_, R, 'Four of a kind' ) :- permutation(R, [X,X,X,X,_]). pokerHand(_, R, 'Full house' ) :- permutation(R, [X,X,X,Y,Y]). pokerHand(_, R, 'Three of a kind') :- permutation(R, [X,X,X,_,_]). pokerHand(_, R, 'Two pair' ) :- permutation(R, [X,X,Y,Y,_]). pokerHand(_, R, 'One pair' ) :- permutation(R, [X,X,_,_,_]). pokerHand(_, _, 'No pair' ). poker(Card) :- atom_chars(Card, [S1,R1,S2,R2,S3,R3,S4,R4,S5,R5]), pokerHand([S1,S2,S3,S4,S5], [R1,R2,R3,R4,R5], H), !, writeln(H).