Skip to content

Instantly share code, notes, and snippets.

@egisatoshi
Created July 17, 2012 14:37
Show Gist options
  • Save egisatoshi/3129779 to your computer and use it in GitHub Desktop.
Save egisatoshi/3129779 to your computer and use it in GitHub Desktop.
Poker Hands in Egison
(define $poker-hands
(lambda [$Cs]
(match Cs (Multiset Card)
{[<cons <card $S $n>
<cons <card ,S ,(- n 1)>
<cons <card ,S ,(- n 2)>
<cons <card ,S ,(- n 3)>
<cons <card ,S ,(- n 4)>
!<nil>>>>>>
<straight-flush>]
[<cons <card _ $n>
<cons <card _ ,n>
!<cons <card _ ,n>
!<cons <card _ ,n>
!<cons _
!<nil>>>>>>
<four-of-kind>]
[<cons <card _ $m>
<cons <card _ ,m>
<cons <card _ ,m>
<cons <card _ $n>
!<cons <card _ ,n>
!<nil>>>>>>
<full-house>]
[<cons <card $S _>
!<cons <card ,S _>
!<cons <card ,S _>
!<cons <card ,S _>
!<cons <card ,S _>
!<nil>>>>>>
<flush>]
[<cons <card _ $n>
<cons <card _ ,(- n 1)>
<cons <card _ ,(- n 2)>
<cons <card _ ,(- n 3)>
<cons <card _ ,(- n 4)>
!<nil>>>>>>
<straight>]
[<cons <card _ $n>
<cons <card _ ,n>
<cons <card _ ,n>
<cons _
<cons _
!<nil>>>>>>
<three-of-kind>]
[<cons <card _ $m>
<cons <card _ ,m>
!<cons <card _ $n>
<cons <card _ ,n>
!<cons _
!<nil>>>>>>
<two-pair>]
[<cons <card _ $n>
<cons <card _ ,n>
<cons _
<cons _
<cons _
!<nil>>>>>>
<one-pair>]
[<cons _
<cons _
<cons _
<cons _
<cons _
!<nil>>>>>>
<nothing>]})))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment