Playing Cards continued - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

Playing Cards continued

Description:

colour Spades = Black. colour Hearts = Red. colour Diamonds = Red. colour Clubs = Black ... Spades. Card{rank=Numeric 8,suit=Diamonds} ... – PowerPoint PPT presentation

Number of Views:72
Avg rating:3.0/5.0
Slides: 16
Provided by: johnh58
Category:

less

Transcript and Presenter's Notes

Title: Playing Cards continued


1
Playing Cards continued
  • Lecture 3, 2006

2
Recall
  • Were modelling card play in Haskell
  • Defined
  • New types Suit and Colour
  • colour Suit -gt Colour

colour Suit -gt Colour colour Spades
Black colour Hearts Red colour Diamonds
Red colour Clubs Black
3
Modelling a Card
  • A Card has both a Rank and a Suit
  • Define functions to inspect both

data Card Card Rank Suit deriving Show
rank Card -gt Rank rank (Card r s) r suit
Card -gt Suit suit (Card r s) s
4
A Useful Abbreviation
  • Define type and inspection functions together, as
    follows

data Card Card rank Rank, suit Suit
deriving Show
5
Modelling a Hand of Cards
  • A hand may contain any number of cards from zero
    up!
  • The solution is recursion!

We cant use !!!
data Hand Cards Card Card deriving Show
6
Modelling a Hand of Cards
  • A hand may contain any number of cards from zero
    up!
  • A hand may be empty
  • It may consist of a first card and the rest
  • The rest is another hand of cards!

data Hand Empty Add Card Hand deriving
Show
Solve the problem of modelling a hand with one
fewer cards!
A recursive type!
7
When can a hand beat a card?
  • An empty hand beats nothing
  • A non-empty hand can beat a card if the first
    card can, or the rest of the hand can!
  • A recursive function!

handBeats Suit -gt Hand -gt Card -gt
Bool handBeats trump Empty c' False handBeats
trump (Add c h) c' cardBeats trump c c'
handBeats trump h c'
8
Choose a card to play
  • Given
  • Trump suit
  • Card to beat
  • The hand
  • Beat the card if possible!

9
Strategy
  • If the hand is only one card, play it
  • If there is a choice,
  • Select the best card from the rest of the hand
  • Choose between it and the first card
  • Principles
  • Follow suit if possible
  • Play lowest winning card if possible
  • Play lowest losing card otherwise

10
The Code
-- chooseCard trump beat hand chooses a card from
hand to -- play, when trump is the trump suit and
beat is the card to -- be beaten chooseCard
Suit -gt Card -gt Hand -gt Hand chooseCard trump
beat (Add c Empty) c chooseCard trump beat (Add
c rest) suit csuit beat suit c/suit
beat c suit c/suit beat suit csuit
beat c cardBeats trump c beat not
(cardBeats trump c beat) c cardBeats
trump c beat not (cardBeats trump c beat)
c rankBeats (rank c) (rank c) c
otherwise c where c chooseCard trump
beat rest
11
Properties of chooseCard
  • Complicated code with great potential for errors!
  • Possible properties
  • chooseCard returns a card from the hand (no
    cards up the sleeve)
  • chooseCard follows suit if possible (no
    cheating)
  • chooseCard always wins if possible

12
Testing chooseCard
prop_chooseCardWinsIfPossible trump c h
h/Empty gt handBeats trump h c
cardBeats trump (chooseCard trump c h) c
Maingt quickCheck prop_chooseCardWinsIfPossible Fal
sifiable, after 3 tests Spades CardrankNumeric
8,suitDiamonds Add CardrankNumeric
4,suitDiamonds (Add CardrankNumeric
10,suitSpades Empty)
What went wrong?
13
What Did We Learn?
  • Modelling the problem using datatypes with
    components
  • Using recursive datatypes to model things of
    varying size
  • Using recursive functions to manipulate recursive
    datatypes
  • Writing properties of more complex algorithms

14
Reminder Modelling a Hand
  • A Hand is either
  • An empty hand
  • Formed by adding a card to a smaller hand
  • Discarding the first card

data Hand Empty Add Card Hand deriving
Show
discard (Add c h) h
15
Reading
  • Datatypes are covered in Chapter 14 of the book.
Write a Comment
User Comments (0)
About PowerShow.com