Egi言語

Egi言語で書いたポーカーの役のパターンマッチ。

(define poker_hands
  (lambda (Ks)
    (match Ks (of Multiset (** Mark Mod13))
      ((((S 10) (S 11) (S 12) (S 13) (S 1))
        ())
       "Royal Straight Flush")
      ((((S n) (S n+1) (S n+2) (S n+3) (S n+4))
        ((= n+1 (n) (+ n 1))
         (= n+2 (n) (+ n 2))
         (= n+3 (n) (+ n 3))
         (= n+4 (n) (+ n 4))))
       "Straight Flush")
      ((((_ n) (_ n) (_ n) (_ n) _)
        ())
       "Four of Kind")
      ((((_ m) (_ m) (_ m) (_ n) (_ n))
        ())
       "Full House")
      ((((S _) (S _) (S _) (S _) (S _))
        ())
       "Flush")
      ((((_ n) (_ n+1) (_ n+2) (_ n+3) (_ n+4))
        ((= n+1 (n) (+ n 1))
         (= n+2 (n) (+ n 2))
         (= n+3 (n) (+ n 3))
         (= n+4 (n) (+ n 4))))
       "Straight")
      ((((_ n) (_ n) (_ n) _ _)
        ())
       "Three of Kind")
      ((((_ m) (_ m) (_ n) (_ n) _)
        ())
       "Two Pair")
      ((((_ n) (_ n) _ _ _)
        ())
       "One Pair")
      (((_ _ _ _ _)
        ())
       "Nothing"))))