blob: 0337c849f1bc598396e6cc56ccbab393c7ce21b5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
(define (twenty-one strategy)
(define (play-dealer customer-hand dealer-hand-so-far rest-of-deck)
(cond ((> (best-total dealer-hand-so-far) 21) 1)
((< (best-total dealer-hand-so-far) 17)
(play-dealer customer-hand
(se dealer-hand-so-far (first rest-of-deck))
(bf rest-of-deck)))
((< (best-total customer-hand) (best-total dealer-hand-so-far)) -1)
((= (best-total customer-hand) (best-total dealer-hand-so-far)) 0)
(else 1)))
(define (play-customer customer-hand-so-far dealer-up-card rest-of-deck)
(cond ((> (best-total customer-hand-so-far) 21) -1)
((strategy customer-hand-so-far dealer-up-card)
(play-customer (se customer-hand-so-far (first rest-of-deck))
dealer-up-card
(bf rest-of-deck)))
(else
(play-dealer customer-hand-so-far
(se dealer-up-card (first rest-of-deck))
(bf rest-of-deck)))))
(let ((deck (make-deck)))
(play-customer (se (first deck) (first (bf deck)))
(first (bf (bf deck)))
(bf (bf (bf deck))))) )
(define (make-ordered-deck)
(define (make-suit s)
(map (lambda (rank) (word rank s)) '(A 2 3 4 5 6 7 8 9 10 J Q K)) )
(se (make-suit 'H) (make-suit 'S) (make-suit 'D) (make-suit 'C)) )
(define (make-deck)
(define (shuffle deck size)
(define (move-card in out which)
(if (= which 0)
(se (first in) (shuffle (se (bf in) out) (-1+ size)))
(move-card (bf in) (se (first in) out) (-1+ which)) ))
(if (= size 0)
deck
(move-card deck '() (random size)) ))
(shuffle (make-ordered-deck) 52) )
|