1 665c255d 2023-08-04 jrmu (define (test-case actual expected)
3 665c255d 2023-08-04 jrmu (display "Actual: ")
4 665c255d 2023-08-04 jrmu (display actual)
6 665c255d 2023-08-04 jrmu (display "Expected: ")
7 665c255d 2023-08-04 jrmu (display expected)
10 665c255d 2023-08-04 jrmu (define (memq item x)
11 665c255d 2023-08-04 jrmu (cond ((null? x) false)
12 665c255d 2023-08-04 jrmu ((eq? item (car x)) x)
13 665c255d 2023-08-04 jrmu (else (memq item (cdr x)))))
15 665c255d 2023-08-04 jrmu (define (equal? a b)
16 665c255d 2023-08-04 jrmu (cond ((and (null? a)
19 665c255d 2023-08-04 jrmu ((and (not (pair? a))
20 665c255d 2023-08-04 jrmu (not (pair? b))
23 665c255d 2023-08-04 jrmu ((and (pair? a)
25 665c255d 2023-08-04 jrmu (and (equal? (car a) (car b))
26 665c255d 2023-08-04 jrmu (equal? (cdr a) (cdr b))))
29 665c255d 2023-08-04 jrmu (test-case (equal? 4 4) #t)
30 665c255d 2023-08-04 jrmu (test-case (equal? 4 0) #f)
31 665c255d 2023-08-04 jrmu (test-case (equal? 4 '()) #f)
32 665c255d 2023-08-04 jrmu (test-case (equal? '() 4) #f)
33 665c255d 2023-08-04 jrmu (test-case (equal? '() '()) #t)
34 665c255d 2023-08-04 jrmu (test-case (equal? '(4) '()) #f)
35 665c255d 2023-08-04 jrmu (test-case (equal? '((4) (3)) '((4 3))) #f)
36 665c255d 2023-08-04 jrmu (test-case (equal? '((4) (3)) '((4) (3))) #t)
37 665c255d 2023-08-04 jrmu (test-case (equal? '((4) (3)) '((4) (2))) #f)
38 665c255d 2023-08-04 jrmu (test-case (equal? '(4 3 2) '(4 3 2 5)) #f)
40 665c255d 2023-08-04 jrmu ;; Exercise 2.55. Eva Lu Ator types to the interpreter the expression
42 665c255d 2023-08-04 jrmu (car ''abracadabra)
44 665c255d 2023-08-04 jrmu ;; To her surprise, the interpreter prints back quote. Explain.
46 665c255d 2023-08-04 jrmu (car '(quote abracadabra))
47 665c255d 2023-08-04 jrmu (car (list quote abracadabra))
48 665c255d 2023-08-04 jrmu ;; ''abracadabra is actually (quote (quote abracadabra)), which is the same as '(quote abracadabra). The interpreter sees the symbol quote as the first element in a two-element list.