summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2023-03-19 10:24:56 +0100
committerMike Vink <mike1994vink@gmail.com>2023-03-19 10:24:56 +0100
commitdc322c0c524ae959e623636d68716c91d5a09404 (patch)
tree6419d49fef6de67ddd90e111aa0e97dd73847d7b
parent53bdf776c4f426a92953d2afa76c1f9ee008c02c (diff)
fixup
-rw-r--r--coding-exercises/2/44.rkt9
-rw-r--r--coding-exercises/2/45.rkt10
-rw-r--r--coding-exercises/2/46.rkt32
-rw-r--r--coding-exercises/2/47.rkt43
-rw-r--r--coding-exercises/2/48.rkt8
-rw-r--r--coding-exercises/2/49.rkt21
-rw-r--r--shared/pict.rkt61
7 files changed, 184 insertions, 0 deletions
diff --git a/coding-exercises/2/44.rkt b/coding-exercises/2/44.rkt
index 9381ac9..3b8c76c 100644
--- a/coding-exercises/2/44.rkt
+++ b/coding-exercises/2/44.rkt
@@ -1,5 +1,6 @@
#lang racket
(require sicp-pict)
+(require "../../shared/pict.rkt")
(define wave2 (beside einstein (flip-vert einstein)))
(define wave4 (below wave2 wave2))
@@ -27,3 +28,11 @@
(beside (below painter top-left)
(below bottom-right corner))))))
(paint (corner-split einstein 4))
+
+(define (square-limit painter n)
+ (let ((quarter (corner-split painter n)))
+ (let ((half (beside (flip-horiz quarter) quarter)))
+ (below (flip-vert half) half))))
+
+(square-limit einstein 4)
+(paint (square-limit einstein 4))
diff --git a/coding-exercises/2/45.rkt b/coding-exercises/2/45.rkt
new file mode 100644
index 0000000..1939675
--- /dev/null
+++ b/coding-exercises/2/45.rkt
@@ -0,0 +1,10 @@
+#lang racket
+(require sicp-pict)
+
+(define (split adjoiner splitter)
+ (lambda (painter)
+ (let ((splitted (splitter painter painter)))
+ (adjoiner painter splitted))))
+
+(define right-split (split beside below))
+(define up-split (split below beside))
diff --git a/coding-exercises/2/46.rkt b/coding-exercises/2/46.rkt
new file mode 100644
index 0000000..4016ef7
--- /dev/null
+++ b/coding-exercises/2/46.rkt
@@ -0,0 +1,32 @@
+#lang racket
+(require "../../shared/lists.rkt")
+
+(define (make-vect x y)
+ (cons x y))
+(define (xcor-vect v)
+ (car v))
+(define (ycor-vect v)
+ (cdr v))
+
+(define (add-vect . v)
+ (make-vect
+ (fold-right + 0 (map xcor-vect v))
+ (fold-right + 0 (map ycor-vect v))))
+(define (sub-vect . v)
+ (let ((xcors (map xcor-vect v))
+ (ycors (map ycor-vect v)))
+ (make-vect
+ (- (car xcors) (fold-right + 0 (cdr xcors)))
+ (- (car ycors) (fold-right + 0 (cdr ycors))))))
+(define (scale-vect s v)
+ (make-vect (* s (xcor-vect v))
+ (* s (ycor-vect v))))
+
+(define test-vec (make-vect 1 2))
+(define test-vec2 (make-vect 3 4))
+((lambda ()
+ (display (add-vect test-vec test-vec2))
+ (newline)
+ (display (sub-vect test-vec test-vec2))
+ (newline)
+ (display (scale-vect 3 test-vec))))
diff --git a/coding-exercises/2/47.rkt b/coding-exercises/2/47.rkt
new file mode 100644
index 0000000..5e1c562
--- /dev/null
+++ b/coding-exercises/2/47.rkt
@@ -0,0 +1,43 @@
+#lang racket
+(require "../../shared/pict.rkt")
+(define (make-frame origin edge1 edge2)
+ (list origin edge1 edge2))
+(define (origin-frame frame)
+ (car frame))
+(define (edge1-frame frame)
+ (cadr frame))
+(define (edge2-frame frame)
+ (caddr frame))
+
+(define test-frame (make-frame
+ (make-vect 1 2)
+ (make-vect 2 4)
+ (make-vect 3 6)))
+((lambda ()
+ (newline)
+ (display test-frame)
+ (newline)
+ (display (origin-frame test-frame))
+ (display (edge1-frame test-frame))
+ (display (edge2-frame test-frame))))
+
+(define (make-frame2 origin edge1 edge2)
+ (cons origin (cons edge1 edge2)))
+(define (origin-frame2 frame)
+ (car frame))
+(define (edge1-frame2 frame)
+ (cadr frame))
+(define (edge2-frame2 frame)
+ (cddr frame))
+
+(define test-frame2 (make-frame2
+ (make-vect 1 2)
+ (make-vect 2 4)
+ (make-vect 3 6)))
+((lambda ()
+ (newline)
+ (display test-frame2)
+ (newline)
+ (display (origin-frame2 test-frame2))
+ (display (edge1-frame2 test-frame2))
+ (display (edge2-frame2 test-frame2))))
diff --git a/coding-exercises/2/48.rkt b/coding-exercises/2/48.rkt
new file mode 100644
index 0000000..2ff696a
--- /dev/null
+++ b/coding-exercises/2/48.rkt
@@ -0,0 +1,8 @@
+#lang racket
+
+(define (make-segment start end)
+ (cons start end))
+(define (start-segment s)
+ (car s))
+(define (end-segment s)
+ (cdr s))
diff --git a/coding-exercises/2/49.rkt b/coding-exercises/2/49.rkt
new file mode 100644
index 0000000..688364a
--- /dev/null
+++ b/coding-exercises/2/49.rkt
@@ -0,0 +1,21 @@
+#lang racket
+(require (only-in sicp-pict
+ paint
+ segments->painter))
+(require "../../shared/pict.rkt")
+
+(define (outline frame)
+ (display frame)
+ (let ((corner
+ (add-vect
+ (edge1-frame frame)
+ (edge2-frame frame)))
+ (origin (origin-frame frame))
+ (e1 (edge1-frame frame))
+ (e2 (edge2-frame frame)))
+ (segments->painter
+ (list (make-segment origin e1)
+ (make-segment e1 corner)
+ (make-segment corner e2)
+ (make-segment e2 origin)))))
+(paint outline)
diff --git a/shared/pict.rkt b/shared/pict.rkt
new file mode 100644
index 0000000..7c7a74e
--- /dev/null
+++ b/shared/pict.rkt
@@ -0,0 +1,61 @@
+#lang racket
+(provide
+ make-vect
+ xcor-vect
+ ycor-vect
+ add-vect
+ sub-vect
+ scale-vect
+ test-vect
+ make-frame
+ origin-frame
+ edge1-frame
+ edge2-frame
+ test-frame
+ make-segment
+ start-segment
+ end-segment)
+(require sicp-pict)
+(require "lists.rkt")
+
+(define (make-vect x y)
+ (cons x y))
+(define (xcor-vect v)
+ (car v))
+(define (ycor-vect v)
+ (cdr v))
+
+(define (add-vect . v)
+ (make-vect
+ (fold-right + 0 (map xcor-vect v))
+ (fold-right + 0 (map ycor-vect v))))
+(define (sub-vect . v)
+ (let ((xcors (map xcor-vect v))
+ (ycors (map ycor-vect v)))
+ (make-vect
+ (- (car xcors) (fold-right + 0 (cdr xcors)))
+ (- (car ycors) (fold-right + 0 (cdr ycors))))))
+(define (scale-vect s v)
+ (make-vect (* s (xcor-vect v))
+ (* s (ycor-vect v))))
+(define test-vect (make-vect 1 2))
+
+(define (make-frame origin edge1 edge2)
+ (list origin edge1 edge2))
+(define (origin-frame frame)
+ (car frame))
+(define (edge1-frame frame)
+ (cadr frame))
+(define (edge2-frame frame)
+ (caddr frame))
+(define test-frame (make-frame
+ (make-vect 1 2)
+ (make-vect 2 4)
+ (make-vect 3 6)))
+
+(define (make-segment start end)
+ (cons start end))
+(define (start-segment s)
+ (car s))
+(define (end-segment s)
+ (cdr s))