-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path2.3.scm
executable file
·45 lines (38 loc) · 1.23 KB
/
2.3.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env chicken-scheme
(use sicp test)
(include "segment.scm")
(define (length p1 p2)
(sqrt (+ (square (- (x-point p2)
(x-point p1)))
(square (- (y-point p2)
(y-point p1))))))
(define (make-segment-rect s1 s2)
(lambda (message)
(case message
((length)
(length (start-segment s1)
(end-segment s1)))
((width)
(length (start-segment s2)
(end-segment s2))))))
(define (make-point-rect p1 p2 p3)
(lambda (message)
(case message
((length) (length p1 p2))
((width) (length p2 p3)))))
(define (perimeter rect)
(* 2 (+ (rect 'length)
(rect 'width))))
(define (area rect)
(* (rect 'length) (rect 'width)))
(let ((r1 (make-segment-rect (make-segment (make-point 0 0)
(make-point 2 0))
(make-segment (make-point 0 0)
(make-point 0 3))))
(r2 (make-point-rect (make-point 2 0)
(make-point 0 0)
(make-point 0 3))))
(test 10.0 (perimeter r1))
(test (perimeter r1) (perimeter r2))
(test 6.0 (area r1))
(test (area r1) (area r2)))