diff options
author | elioat <elioat@tilde.institute> | 2023-08-23 07:52:19 -0400 |
---|---|---|
committer | elioat <elioat@tilde.institute> | 2023-08-23 07:52:19 -0400 |
commit | 562a9a52d599d9a05f871404050968a5fd282640 (patch) | |
tree | 7d3305c1252c043bfe246ccc7deff0056aa6b5ab /js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm | |
parent | 5d012c6c011a9dedf7d0a098e456206244eb5a0f (diff) | |
download | tour-562a9a52d599d9a05f871404050968a5fd282640.tar.gz |
*
Diffstat (limited to 'js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm')
-rw-r--r-- | js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm new file mode 100644 index 0000000..2cf3505 --- /dev/null +++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm @@ -0,0 +1,60 @@ +; first version -- no data abstraction + +(define (total-hand hand) + (if (empty? hand) + 0 + (+ (butlast (last hand)) + (total-hand (butlast hand)) ))) + + +(total-hand '(3h 10c 4d)) + + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; second version -- add selectors + +(define (total-hand hand) + (if (empty? hand) + 0 + (+ (card-rank (one-card hand)) + (total-hand (remaining-cards hand)) ))) + +(define card-rank butlast) +(define card-suit last) + +(define one-card last) +(define remaining-cards butlast) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; third version -- add constructors + +(define (make-card rank suit) + (word rank (first suit)) ) + +(define make-hand se) + + +(total-hand (make-hand (make-card 3 'heart) + (make-card 10 'club) + (make-card 4 'diamond) )) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; fourth version -- change implementation + +(define (make-card rank suit) + (cond ((equal? suit 'heart) rank) + ((equal? suit 'spade) (+ rank 13)) + ((equal? suit 'diamond) (+ rank 26)) + ((equal? suit 'club) (+ rank 39)) + (else (error "say what?")) )) + +(define (card-rank card) + (remainder card 13)) + +(define (card-suit card) + (nth (quotient card 13) '(heart spade diamond club))) + |