diff options
Diffstat (limited to 'shared')
| -rw-r--r-- | shared/lists.rkt | 27 | ||||
| -rw-r--r-- | shared/pict.rkt | 27 |
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)) |
