summaryrefslogtreecommitdiff
path: root/coding-exercises
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises')
-rw-r--r--coding-exercises/2/50.rkt33
-rw-r--r--coding-exercises/2/51.rkt29
-rw-r--r--coding-exercises/2/52.rkt65
-rw-r--r--coding-exercises/2/53.rkt9
-rw-r--r--coding-exercises/2/54.rkt4
5 files changed, 140 insertions, 0 deletions
diff --git a/coding-exercises/2/50.rkt b/coding-exercises/2/50.rkt
new file mode 100644
index 0000000..373e22a
--- /dev/null
+++ b/coding-exercises/2/50.rkt
@@ -0,0 +1,33 @@
+#lang racket
+(require "../../shared/pict.rkt")
+(require "../../shared/lists.rkt")
+(require sicp-pict)
+
+(define (flip-horiz painter)
+ (transform-painter
+ painter
+ (make-vect 1 0)
+ (make-vect 0 0)
+ (make-vect 1 1)))
+
+(define (flip-vert painter)
+ (transform-painter
+ painter
+ (make-vect 0 1)
+ (make-vect 1 1)
+ (make-vect 0 0)))
+
+(define (<-rotate180 painter)
+ (flip-horiz (flip-vert painter)))
+(define (<-rotate270 painter)
+ (transform-painter
+ painter
+ (make-vect 0 1)
+ (make-vect 0 0)
+ (make-vect 1 1)))
+
+(paint einstein)
+(paint (flip-horiz einstein))
+(paint (flip-vert einstein))
+(paint (<-rotate180 einstein))
+(paint (<-rotate270 einstein))
diff --git a/coding-exercises/2/51.rkt b/coding-exercises/2/51.rkt
new file mode 100644
index 0000000..5dcdd70
--- /dev/null
+++ b/coding-exercises/2/51.rkt
@@ -0,0 +1,29 @@
+#lang racket
+(require "../../shared/pict.rkt")
+
+(define (below painter1 painter2)
+ (let ((split-point (make-vect 0 0.5)))
+ (let ((top-painter
+ (transform-painter
+ painter2
+ split-point
+ (make-vect 1 0.5)
+ (make-vect 0 1)))
+ (bot-painter
+ (transform-painter
+ painter1
+ (make-vect 0 0)
+ (make-vect 1 0)
+ split-point)))
+ (lambda (frame)
+ (top-painter frame)
+ (bot-painter frame)))))
+
+(define (below2 painter1 painter2)
+ (<-rotate180
+ (<-rotate270
+ (beside (<-rotate270 painter1)
+ (<-rotate270 painter2)))))
+
+(paint (below einstein einstein))
+(paint (below2 einstein einstein))
diff --git a/coding-exercises/2/52.rkt b/coding-exercises/2/52.rkt
new file mode 100644
index 0000000..29f4e6d
--- /dev/null
+++ b/coding-exercises/2/52.rkt
@@ -0,0 +1,65 @@
+#lang racket
+(require "../../shared/pict.rkt")
+
+(define (wave frame)
+ (let ((wave-points
+ (list
+ (make-vect 0.24 0)
+ (make-vect 0.37 0.5)
+ (make-vect 0.3 0.6)
+ (make-vect 0.15 0.5)
+ (make-vect 0 0.7)
+ (make-vect 0 0.85)
+ (make-vect 0.15 0.65)
+ (make-vect 0.35 0.7)
+ (make-vect 0.4 0.7)
+ (make-vect 0.3 0.85)
+ (make-vect 0.36 1)
+ (make-vect 0.57 1)
+ (make-vect 0.62 0.855)
+ (make-vect 0.55 0.7)
+ (make-vect 0.65 0.7)
+ (make-vect 1 0.35)
+ (make-vect 1 0.25)
+ (make-vect 0.55 0.52)
+ (make-vect 0.7 0)
+ (make-vect 0.55 0)
+ (make-vect 0.45 0.4)
+ (make-vect 0.34 0)))
+ (smile
+ (list
+ (make-vect 0.4 0.8)
+ (make-vect 0.45 0.75)
+ (make-vect 0.5 0.75)
+ (make-vect 0.53 0.78))))
+ ((segments->painter
+ (append
+ (line-points->segments smile)
+ (line-points->segments
+ (close-line
+ wave-points)))) frame)))
+(paint wave)
+
+(define (corner-split painter n)
+ (if (= n 0)
+ painter
+ (let ((up (up-split painter (- n 1)))
+ (right (right-split painter (- n 1))))
+ (let ((top-left up)
+ (bottom-right right)
+ (corner (corner-split painter (- n 1))))
+ (beside (below painter top-left)
+ (below bottom-right corner))))))
+(paint (corner-split einstein 4))
+
+(define (square-limit painter n)
+ (let ((s (lambda (f)
+ (lambda (painter) (f (corner-split (flip-horiz painter) n))))))
+ ((square-of-four
+ (s flip-horiz)
+ (s (lambda (x) x))
+ (s <-rotate180)
+ (s flip-vert))
+ painter)))
+
+(paint (square-limit einstein 2))
diff --git a/coding-exercises/2/53.rkt b/coding-exercises/2/53.rkt
new file mode 100644
index 0000000..791bcd6
--- /dev/null
+++ b/coding-exercises/2/53.rkt
@@ -0,0 +1,9 @@
+#lang racket
+
+(list 'a 'b 'c)
+(list (list 'george))
+(cdr '((x1 x2) (y1 y2)))
+(cadr '((x1 x2) (y1 y2)))
+(pair? (car '(a short list)))
+(memq 'red '((red shoes) (blue socks)))
+(memq 'red '(red shoes blue socks))
diff --git a/coding-exercises/2/54.rkt b/coding-exercises/2/54.rkt
new file mode 100644
index 0000000..c59a91a
--- /dev/null
+++ b/coding-exercises/2/54.rkt
@@ -0,0 +1,4 @@
+#lang racket
+
+(equal? '(this is a list) '(this is a list))
+(equal? '(this is a list) '(this (is a) list))