-
Notifications
You must be signed in to change notification settings - Fork 1
/
Exercise 2.47 make-frame.rkt
75 lines (59 loc) · 1.52 KB
/
Exercise 2.47 make-frame.rkt
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#lang racket
; Exercise 2.47. Here are two possible constructors for frames:
; (define (make-frame origin edge1 edge2)
; (list origin edge1 edge2))
; (define (make-frame origin edge1 edge2)
; (cons origin (cons edge1 edge2)))
; For each constructor supply the appropriate selectors to produce an implementation for
; frames.
; SOLUTION
(define (make-frame1 origin edge1 edge2)
(list origin edge1 edge2)
)
(define (origin-frame1 f)
(car f)
)
(define (edge1-frame1 f)
(car (cdr f))
)
(define (edge2-frame1 f)
(car (cdr (cdr f)))
)
(define (make-frame2 origin edge1 edge2)
(cons origin (cons edge1 edge2))
)
(define (origin-frame2 f)
(car f)
)
(define (edge1-frame2 f)
(car (cdr f))
)
(define (edge2-frame2 f)
(cdr (cdr f))
)
(define (make-vect x y)
(cons x y)
)
; Tests
Welcome to DrRacket, version 6.11 [3m].
Language: racket, with debugging; memory limit: 128 MB.
> (define origin (make-vect 3 5))
> (define edge1 (make-vect 2 -4))
> (define edge2 (make-vect 4 9))
> (make-frame1 origin edge1 edge2)
'((3 . 5) (2 . -4) (4 . 9))
> (origin-frame1 (make-frame1 origin edge1 edge2))
'(3 . 5)
> (edge1-frame1 (make-frame1 origin edge1 edge2))
'(2 . -4)
> (edge2-frame1 (make-frame1 origin edge1 edge2))
'(4 . 9)
> (make-frame2 origin edge1 edge2)
'((3 . 5) (2 . -4) 4 . 9)
> (origin-frame2 (make-frame2 origin edge1 edge2))
'(3 . 5)
> (edge1-frame2 (make-frame2 origin edge1 edge2))
'(2 . -4)
> (edge2-frame2 (make-frame2 origin edge1 edge2))
'(4 . 9)
>