-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdrawings.scm
70 lines (65 loc) · 1.94 KB
/
drawings.scm
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#lang scheme/base
(require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))
(define wave2 (beside einstein (flip-vert einstein)))
(define wave4 (below wave2 wave2))
;(define (flipped-pairs painter)
; (let ([painter2 (beside painter (flip-vert painter))])
; (below painter2 painter2)
; )
; )
;(define (right-split painter n)
; (if (= n 0)
; painter
; (let ([smaller (right-split painter (- n 1))])
; (beside painter (below smaller smaller))
; )
; )
; )
;(define (up-split painter n)
; (if (= n 0)
; painter
; (let ([smaller (right-split painter (- n 1))])
; (below painter (beside smaller smaller))
; )
; )
; )
(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 (beside up up)]
[bottom-right (below right right)]
[corner (corner-split painter (- n 1))])
(beside (below painter top-left) (below bottom-right corner))
)
))
)
(define (square-of-four tl tr bl br)
(lambda(painter) (let ([top (beside (tl painter) (tr painter))]
[bottom (beside (bl painter) (br painter))])
(below bottom top))
))
(define (identity l) l)
(define (flipped-pairs painter)
(let ([combine4 (square-of-four identity flip-vert identity flip-vert)])
(combine4 painter))
)
(define (square-limit painter n)
(let ([combine4 (square-of-four flip-horiz identity rotate180 flip-vert)])
(combine4 (corner-split painter n))
)
)
(define (split op1 op2)
(define (split-util painter n)
(if (= n 0)
painter
(let ([smaller (split-util painter (- n 1))])
(op1 painter (op2 smaller smaller))
)
)
)
(lambda(painter n) (split-util painter n))
)
(define right-split (split beside below))
(define up-split (split below beside))