(define make-rectangle cons) (define rectangle-height car) (define rectangle-width cdr) (define make-isosceles-triangle cons) (define isosceles-triangle-side car) (define isosceles-triangle-base cdr) (define isosceles-triangle-perimeter (lambda (r) (+ (* (isosceles-triangle-side r) 2) (isosceles-triangle-base r)))) ;; We didn't finish writing this in class ;(define isosceles-triangle-area ; (lambda (r) ; (* .5 (* (isosceles-triangle-base r) (sqrt (- (expt (isosceles-triangle-base r) ; 2) ; (expt (define right-triangle-perimeter (lambda (r) (+ (right-triangle-base r) (right-triangle-height r) (sqrt (+ (expt (right-triangle-height r) 2) (expt (right-triangle-base r) 2)))))) (define make-right-triangle cons) (define right-triangle-height cdr) (define right-triangle-base car) (define rectangle-area (lambda (r) (* (rectangle-height r) (rectangle-width r)))) (define rectangle-perimeter (lambda (r) (* 2 (+ (rectangle-height r) (rectangle-width r))))) (define tagged-datum (lambda (type value) (cons type value))) (define type car) (define contents cdr) (define list-of-shapes (list (tagged-datum 'rectangle (make-rectangle 4 10)) (tagged-datum 'isosceles-triangle (make-isosceles-triangle 6 2)) (tagged-datum 'isosceles-triangle (make-isosceles-triangle 5 8)) (tagged-datum 'right-triangle (make-right-triangle 3 4)))) (define perimeter (lambda (td) (cond ((equal? (type td) 'rectangle) (rectangle-perimeter (contents td))) ((equal? (type td) 'isosceles-triangle) (isosceles-triangle-perimeter (contents td))) ((equal? (type td) 'right-triangle) (right-triangle-perimeter (contents td))) (else (error "I have no clue how to find the perimeter of a" (type td))))))