Task

Create a data structure and the associated methods to define and manipulate a deck of   playing cards.

The deck should contain 52 unique cards.

The methods must include the ability to:

   make a new deck
   shuffle (randomize) the deck
   deal from the deck
   print the current contents of a deck 
Each card must have a pip value and a suit value which constitute the unique value of the card.

Related tasks:

 Card shuffles
 Deal cards_for_FreeCell
 War Card_Game
 Poker hand_analyser
 Go Fish


#lang racket
 
;; suits:
(define suits '(club heart diamond spade))
 
;; ranks
(define ranks '(1 2 3 4 5 6 7 8 9 10 jack queen king))
 
;; cards 
(define cards
  (for*/list ([suit suits] [rank ranks])
    (list suit rank)))
 
;; a deck is a box containing a list of cards.
(define (new-deck)
  (box cards))
 
;; shuffle the cards in a deck
(define (deck-shuffle deck)
  (set-box! deck (shuffle (unbox deck))))
 
;; deal a card from tA 2 3 4 5 6 7 8 9 10 J Q K>;
enum Suit he deck:
(define (deck-deal deck)
  (begin0 (first (unbox deck))
          (set-box! deck (rest (unbox deck)))))
 
 
;; TRY IT OUT:
(define my-deck (new-deck))
(deck-shuffle my-deck)
(deck-deal my-deck)
(deck-deal my-deck)
(length (unbox my-deck))