1 day ago
my attempt to do the exercises in sicp.
Sunday, July 20, 2008
sicp exercise 2.49
;; Exercise 2.49. Use segments->painter to define the following primitive painters:
;; a. The painter that draws the outline of the designated frame.
;; b. The painter that draws an "X" by connecting opposite corners of the frame.
;; c. The painter that draws a diamond shape by connecting the midpoints of the sides of the frame.
;; d. The wave painter.
(define (make-vect x y) (cons x y))
(define (make-segment start end) (cons start end))
(define (start-segment line-segment) (car line-segment))
(define (end-segment line-segment) (cdr line-segment))
(define (segments->painter segment-list)
(lambda (frame)
(for-each
(lambda (segment)
(draw-line
((frame-coord-map frame) (start-segment segment))
((frame-coord-map frame) (end-segment segment))))
segment-list)))
;; a.
(define outline-segments
(list (make-segment (make-vect 0 0) (make-vect 0 1))
(make-segment (make-vect 0 1) (make-vect 1 1))
(make-segment (make-vect 1 1) (make-vect 1 0))
(make-segment (make-vect 1 0) (make-vect 0 0))))
(define (outline-painter frame) (segments->painter outline-segments))
;; b.
(define X-segments
(list (make-segment (make-vect 0 0) (make-vect 1 1))
(make-segment (make-vect 1 0) (make-vect 0 1))))
(define (X-painter frame) (segments->painter X-segments))
;; c.
(define diamond-segments
(list (make-segment (make-vect 0.0 0.5) (make-vect 0.5 1.0))
(make-segment (make-vect 0.5 1.0) (make-vect 1.0 0.5))
(make-segment (make-vect 1.0 0.5) (make-vect 0.5 0.0))
(make-segment (make-vect 0.5 0.0) (make-vect 0.0 0.5))))
(define (diamond-painter frame) (segments->painter diamond-segments))
;; d.
;; too much work :(
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment