summaryrefslogtreecommitdiff
path: root/coding-exercises/2/3.rkt
blob: 83b86aafc8b4c748b9a30a0e53612759e256b75b (plain)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#lang racket
(require "2.rkt")

(define (perimeter rectangle)
  (* 2 (+ (len (width rectangle)) (len (height rectangle)))))
(define (area rectangle) 
  (* (len (width rectangle)) (len (height rectangle)))) 

;; (define (make-rectangle w h)
;;  (cons w h))
;; (define (width rectangle)
;;   (car rectangle))
;; (define (height rectangle)
;;   (cdr rectangle))

(define (make-rectangle w h)
  (lambda (pick)
    (if pick w h)))
(define (width rectangle)
  (rectangle true))
(define (height rectangle)
  (rectangle false))


(define test-rectangle
  (make-rectangle
    (make-segment
      (make-point 0 0) (make-point 2 0))
    (make-segment
      (make-point 0 0) (make-point 0 2))))

(define (print-rectangle r)
  (newline)
  (display "rectangle{")
  (display "width:")
  (display (len (width r)))
  (display ",")
  (display "height:")
  (display (len (height r)))
  (display ",")
  (display "area:")
  (display (area r))
  (display ",")
  (display "perimeter:")
  (display (perimeter r))
  (display "}"))
  
(define (len segment)
  (sqrt 
    (+ (square 
         (- (x-point (end-segment segment)) (x-point (start-segment segment))))
       (square 
         (- (y-point (end-segment segment)) (y-point (start-segment segment)))))))

(define test-len 
  (len (make-segment (make-point 0 2) (make-point 0 0))))

(print-rectangle test-rectangle)