我是用两个点表示的一个矩形,矩形的左下方的点和右上方的点。
还有一种方法可以用一个左下方的点,一个长,一个宽就可以了。
建立抽象屏障就是要求每个表示方法都能求出一个矩形的长和宽,根据这两个信息,就可以求出矩形面积和周长。
(define make-rect cons)
(define s-rect car)
(define e-rect cdr)
(define make-point cons)
(define x-point car)
(define y-point cdr)
(define rect-width
(lambda (rect)
(- (x-point (e-rect rect))
(x-point (s-rect rect)))))
(define rect-heigth
(lambda (rect)
(- (y-point (e-rect rect))
(y-point (s-rect rect)))))
(define rect-area
(lambda (rect)
(* (rect-width rect)
(rect-heigth rect))))
(define rect-perimeter
(lambda (rect)
(* (+ (rect-width rect)
(rect-heigth rect))
2)))
(define rect
(make-rect (make-point 1 2) (make-point 3 4)))
(newline)
(display (rect-area rect))
(newline)
(display (rect-perimeter rect))