summaryrefslogtreecommitdiff
path: root/shared
diff options
context:
space:
mode:
Diffstat (limited to 'shared')
-rw-r--r--shared/lists.rkt27
-rw-r--r--shared/pict.rkt27
2 files changed, 37 insertions, 17 deletions
diff --git a/shared/lists.rkt b/shared/lists.rkt
index b721623..f8d96d0 100644
--- a/shared/lists.rkt
+++ b/shared/lists.rkt
@@ -4,7 +4,8 @@
fold-right
fold-left
flatmap
- enumerate-interval)
+ enumerate-interval
+ enumerate-windows)
(define (append list1 list2)
(if (null? list1)
list2
@@ -68,3 +69,27 @@
(enumerate-interval 1 (- i 1))))
(enumerate-interval 1 n)))
+(define (enumerate-windows seq n)
+ (define (setup-n-window)
+ (define (rec i things)
+ (if (> i n)
+ (list '() things)
+ (let ((setup (rec (+ i 1)
+ (cdr things))))
+ (cons (cons (car things) (car setup))
+ (cdr setup)))))
+ (rec 1 seq))
+ (define (shift-window w item)
+ (append (cdr w) (list item)))
+ (define (iter result window things)
+ (if (null? things)
+ (cons window result)
+ (iter (cons window result)
+ (shift-window window (car things))
+ (cdr things))))
+ (let ((setup (setup-n-window)))
+ (iter '() (car setup) (cadr setup))))
+
+(enumerate-windows
+ (enumerate-interval 1 4)
+ 2)
diff --git a/shared/pict.rkt b/shared/pict.rkt
index 7c7a74e..6eb2e19 100644
--- a/shared/pict.rkt
+++ b/shared/pict.rkt
@@ -7,26 +7,25 @@
sub-vect
scale-vect
test-vect
- make-frame
origin-frame
edge1-frame
edge2-frame
test-frame
make-segment
start-segment
- end-segment)
+ end-segment
+ paint
+ segments->painter)
(require sicp-pict)
(require "lists.rkt")
-(define (make-vect x y)
- (cons x y))
(define (xcor-vect v)
- (car v))
+ (vector-xcor v))
(define (ycor-vect v)
- (cdr v))
+ (vector-ycor v))
(define (add-vect . v)
- (make-vect
+ (make-vect
(fold-right + 0 (map xcor-vect v))
(fold-right + 0 (map ycor-vect v))))
(define (sub-vect . v)
@@ -40,22 +39,18 @@
(* 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))
+ (frame-origin frame))
(define (edge1-frame frame)
- (cadr frame))
+ (frame-edge1 frame))
(define (edge2-frame frame)
- (caddr frame))
+ (frame-edge2 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))
+ (segment-start s))
(define (end-segment s)
- (cdr s))
+ (segment-end s))