Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-intermediate-reader.ss" "lang")((modname 19.2.3-19.2.4) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu (define-struct pairs (left right))
5 12687dd9 2023-08-04 jrmu
6 12687dd9 2023-08-04 jrmu ;Pairs are a structure
7 12687dd9 2023-08-04 jrmu ;(make-pairs l r)
8 12687dd9 2023-08-04 jrmu ;where l is an X and r is a Y.
9 12687dd9 2023-08-04 jrmu ;
10 12687dd9 2023-08-04 jrmu ;Some concrete examples of this abstract class of data are:
11 12687dd9 2023-08-04 jrmu ;(listof (make-pairs number number))
12 12687dd9 2023-08-04 jrmu ;(listof (make-pairs 5 6))
13 12687dd9 2023-08-04 jrmu ;(listof (make-pairs symbol number))
14 12687dd9 2023-08-04 jrmu ;(listof (make-pairs 'words 5))
15 12687dd9 2023-08-04 jrmu ;(listof (make-pairs symbol symbol))
16 12687dd9 2023-08-04 jrmu ;(listof (make-pairs 'leftside 'rightside))
17 12687dd9 2023-08-04 jrmu
18 12687dd9 2023-08-04 jrmu ;lefts : (listof (make-pairs X Y)) -> (listof X)
19 12687dd9 2023-08-04 jrmu ;Given alopxy, return only the left side of the pairs as a (listof X).
20 12687dd9 2023-08-04 jrmu
21 12687dd9 2023-08-04 jrmu (define (lefts alopxy)
22 12687dd9 2023-08-04 jrmu (cond
23 12687dd9 2023-08-04 jrmu [(empty? alopxy) empty]
24 12687dd9 2023-08-04 jrmu [(cons? alopxy) (cons (pairs-left (first alopxy)) (lefts (rest alopxy)))]))
25 12687dd9 2023-08-04 jrmu
26 12687dd9 2023-08-04 jrmu (define list1 (list (make-pairs 5 6)
27 12687dd9 2023-08-04 jrmu (make-pairs 'false false)
28 12687dd9 2023-08-04 jrmu (make-pairs true 'heyThere)
29 12687dd9 2023-08-04 jrmu (make-pairs (make-pairs 5 6) (make-pairs 'hey 'me))
30 12687dd9 2023-08-04 jrmu (make-pairs '(5 1 4 2) '(hey joe its me))
31 12687dd9 2023-08-04 jrmu (make-pairs 1 'word)
32 12687dd9 2023-08-04 jrmu (make-pairs 'last 'one)))
33 12687dd9 2023-08-04 jrmu
34 12687dd9 2023-08-04 jrmu ;rights : (listof (make-pairs X Y)) -> (listof X)
35 12687dd9 2023-08-04 jrmu ;Given alopxy, return only the right side of the pairs as a (listof X).
36 12687dd9 2023-08-04 jrmu
37 12687dd9 2023-08-04 jrmu (define (rights alopxy)
38 12687dd9 2023-08-04 jrmu (cond
39 12687dd9 2023-08-04 jrmu [(empty? alopxy) empty]
40 12687dd9 2023-08-04 jrmu [(cons? alopxy) (cons (pairs-right (first alopxy)) (rights (rest alopxy)))]))
41 12687dd9 2023-08-04 jrmu
42 12687dd9 2023-08-04 jrmu ;side : ((make-pairs X Y) -> X or Y) (listof (make-pairs X Y)) -> (listof X)
43 12687dd9 2023-08-04 jrmu ;Given which-side and alopxy, return only one side of the pairs as a (listof X). which-side should be either pairs-left or pairs-right.
44 12687dd9 2023-08-04 jrmu
45 12687dd9 2023-08-04 jrmu (define (side which-side alopxy)
46 12687dd9 2023-08-04 jrmu (cond
47 12687dd9 2023-08-04 jrmu [(empty? alopxy) empty]
48 12687dd9 2023-08-04 jrmu [(cons? alopxy) (cons (which-side (first alopxy)) (side which-side (rest alopxy)))]))
49 12687dd9 2023-08-04 jrmu
50 12687dd9 2023-08-04 jrmu (equal? (lefts list1) (side pairs-left list1))
51 12687dd9 2023-08-04 jrmu (equal? (rights list1) (side pairs-right list1))
52 12687dd9 2023-08-04 jrmu
53 12687dd9 2023-08-04 jrmu ;A non-empty (listof ITEMS) (neloi) is either
54 12687dd9 2023-08-04 jrmu ;1. (cons s empty) or
55 12687dd9 2023-08-04 jrmu ;2. (cons s n)
56 12687dd9 2023-08-04 jrmu ;where s is an ITEM and n is a non-empty (listof ITEMS) (neloi).
57 12687dd9 2023-08-04 jrmu ;
58 12687dd9 2023-08-04 jrmu ;last : neloi -> ITEM
59 12687dd9 2023-08-04 jrmu (define (last a-neloi)
60 12687dd9 2023-08-04 jrmu (cond
61 12687dd9 2023-08-04 jrmu [(empty? (rest a-neloi)) (first a-neloi)]
62 12687dd9 2023-08-04 jrmu [(cons? (rest a-neloi)) (last (rest a-neloi))]))
63 12687dd9 2023-08-04 jrmu
64 12687dd9 2023-08-04 jrmu (last (list (make-posn 'dollars 5.00)
65 12687dd9 2023-08-04 jrmu (make-posn 'Superman 99.55)
66 12687dd9 2023-08-04 jrmu 'Invincible
67 12687dd9 2023-08-04 jrmu 25
68 12687dd9 2023-08-04 jrmu empty
69 12687dd9 2023-08-04 jrmu false
70 12687dd9 2023-08-04 jrmu 'true
71 12687dd9 2023-08-04 jrmu '(5 1 2 3)
72 12687dd9 2023-08-04 jrmu (make-posn 5 10)))