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 13.0.3) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu (define list-a (list 0 1 2 3 4 5))
5 12687dd9 2023-08-04 jrmu (define list-b (cons 0 (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 empty)))))))
6 12687dd9 2023-08-04 jrmu (define list-c (list (list 'adam 0) (list 'eve 1) (list 'louisXIV 2)))
7 12687dd9 2023-08-04 jrmu (define list-d (cons (cons 'adam (cons 0 empty))
8 12687dd9 2023-08-04 jrmu (cons (cons 'eve (cons 1 empty))
9 12687dd9 2023-08-04 jrmu (cons (cons 'louisXIV (cons 2 empty)) empty))))
10 12687dd9 2023-08-04 jrmu
11 12687dd9 2023-08-04 jrmu
12 12687dd9 2023-08-04 jrmu ;Data Definition
13 12687dd9 2023-08-04 jrmu ;A mixed-list is either
14 12687dd9 2023-08-04 jrmu ;1. an empty list
15 12687dd9 2023-08-04 jrmu ;2. (cons ns ml) where ns is either a number or a symbol
16 12687dd9 2023-08-04 jrmu ;and ml is a mixed-list
17 12687dd9 2023-08-04 jrmu ;3. (cons ml1 ml2) where ml1 and ml2 are both mixed-lists.
18 12687dd9 2023-08-04 jrmu ;
19 12687dd9 2023-08-04 jrmu ;
20 12687dd9 2023-08-04 jrmu ;
21 12687dd9 2023-08-04 jrmu ;list=? : mixed-list mixed-list -> boolean
22 12687dd9 2023-08-04 jrmu ;Compares list1 and list2 and returns true if equal,
23 12687dd9 2023-08-04 jrmu ;false otherwise.
24 12687dd9 2023-08-04 jrmu
25 12687dd9 2023-08-04 jrmu (define (list=? list1 list2)
26 12687dd9 2023-08-04 jrmu (cond
27 12687dd9 2023-08-04 jrmu [(and
28 12687dd9 2023-08-04 jrmu (empty? list1)
29 12687dd9 2023-08-04 jrmu (empty? list2)) true]
30 12687dd9 2023-08-04 jrmu [(or
31 12687dd9 2023-08-04 jrmu (empty? list1)
32 12687dd9 2023-08-04 jrmu (empty? list2)) false]
33 12687dd9 2023-08-04 jrmu [(and (symbol? (first list1))
34 12687dd9 2023-08-04 jrmu (symbol? (first list2))
35 12687dd9 2023-08-04 jrmu (symbol=? (first list1) (first list2)))
36 12687dd9 2023-08-04 jrmu (list=? (rest list1) (rest list2))]
37 12687dd9 2023-08-04 jrmu [(and (number? (first list1))
38 12687dd9 2023-08-04 jrmu (number? (first list2))
39 12687dd9 2023-08-04 jrmu (= (first list1) (first list2)))
40 12687dd9 2023-08-04 jrmu (list=? (rest list1) (rest list2))]
41 12687dd9 2023-08-04 jrmu [(and
42 12687dd9 2023-08-04 jrmu (cons? (first list1))
43 12687dd9 2023-08-04 jrmu (cons? (first list2))
44 12687dd9 2023-08-04 jrmu (list=? (first list1) (first list2)))
45 12687dd9 2023-08-04 jrmu (list=? (rest list1) (rest list2))]
46 12687dd9 2023-08-04 jrmu [else false]))
47 12687dd9 2023-08-04 jrmu
48 12687dd9 2023-08-04 jrmu (define list-e (cons (cons 1 (cons 2 empty)) empty))
49 12687dd9 2023-08-04 jrmu (define list-f (list (list 1 2)))
50 12687dd9 2023-08-04 jrmu ;(list=? list-g list-h) is incorrect for this case
51 12687dd9 2023-08-04 jrmu (define list-g (cons 'a
52 12687dd9 2023-08-04 jrmu (cons (cons 1 empty)
53 12687dd9 2023-08-04 jrmu (cons false empty))))
54 12687dd9 2023-08-04 jrmu (define list-h (list 'a (cons 1 empty) false))
55 12687dd9 2023-08-04 jrmu
56 12687dd9 2023-08-04 jrmu (cons (cons 1 (cons 2 empty))
57 12687dd9 2023-08-04 jrmu (cons (cons 2 (cons 3 empty)) empty))
58 12687dd9 2023-08-04 jrmu (list (list 1 2)
59 12687dd9 2023-08-04 jrmu (list 2 3))
60 12687dd9 2023-08-04 jrmu
61 12687dd9 2023-08-04 jrmu (cons 'a (list 0 false))
62 12687dd9 2023-08-04 jrmu (cons 'a (cons 0 (cons false empty)))
63 12687dd9 2023-08-04 jrmu (list 'a 0 false)
64 12687dd9 2023-08-04 jrmu
65 12687dd9 2023-08-04 jrmu (list (cons 1 (cons 13 empty)))
66 12687dd9 2023-08-04 jrmu (cons (cons 1 (cons 13 empty)) empty)
67 12687dd9 2023-08-04 jrmu (list (list 1 13))
68 12687dd9 2023-08-04 jrmu
69 12687dd9 2023-08-04 jrmu (list empty empty (cons 1 empty))
70 12687dd9 2023-08-04 jrmu (cons empty
71 12687dd9 2023-08-04 jrmu (cons empty
72 12687dd9 2023-08-04 jrmu (cons (cons 1 empty) empty)))
73 12687dd9 2023-08-04 jrmu (list empty empty (list 1))
74 12687dd9 2023-08-04 jrmu
75 12687dd9 2023-08-04 jrmu (cons 'a (cons (list 1) (list false empty)))
76 12687dd9 2023-08-04 jrmu (cons 'a (cons (cons 1 empty) (cons false (cons empty empty))))
77 12687dd9 2023-08-04 jrmu (list 'a (list 1) false empty)