about summary refs log tree commit diff stats
path: root/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm
diff options
context:
space:
mode:
authorelioat <elioat@tilde.institute>2023-08-23 07:52:19 -0400
committerelioat <elioat@tilde.institute>2023-08-23 07:52:19 -0400
commit562a9a52d599d9a05f871404050968a5fd282640 (patch)
tree7d3305c1252c043bfe246ccc7deff0056aa6b5ab /js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.1/total.scm
parent5d012c6c011a9dedf7d0a098e456206244eb5a0f (diff)
downloadtour-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.scm60
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)))
+