#lang sicp (define (make-point x y) (cons x y)) (define (x-point p) (car p)) (define (y-point p) (cdr p)) ; top-left point, bottom-right point representation (define (tlbr-rect a b) (cons 'tlbr (cons a b))) ; center point, width, height representation (define (cpwh-rect p w h) (cons 'cpwh (cons p (cons w h)))) (define (height rect) (cond ((eq? 'cpwh (car rect)) (cdddr rect)) (else (abs (- (y-point (cadr rect)) (y-point (cddr rect))))))) (define (width rect) (cond ((eq? 'cpwh (car rect)) (caddr rect)) (else (abs (- (x-point (cadr rect)) (x-point (cddr rect))))))) (define (perimeter rect) (* 2 (+ (width rect) (height rect)))) (define (area rect) (* (width rect) (height rect)))