Blame


1 665c255d 2023-08-04 jrmu (define (list-ref items n)
2 665c255d 2023-08-04 jrmu (if (= n 0)
3 665c255d 2023-08-04 jrmu (cat items)
4 665c255d 2023-08-04 jrmu (list-ref (cdr items) (- n 1))))
5 665c255d 2023-08-04 jrmu
6 665c255d 2023-08-04 jrmu (define (length items)
7 665c255d 2023-08-04 jrmu (define (length-ter a count)
8 665c255d 2023-08-04 jrmu (if (null? a)
9 665c255d 2023-08-04 jrmu count
10 665c255d 2023-08-04 jrmu (length-iter (cdr a) (+ 1 count))))
11 665c255d 2023-08-04 jrmu (length-iter items 0))
12 665c255d 2023-08-04 jrmu
13 665c255d 2023-08-04 jrmu (define (append list1 list2)
14 665c255d 2023-08-04 jrmu (if (null? list1)
15 665c255d 2023-08-04 jrmu list2
16 665c255d 2023-08-04 jrmu (cons (car list1)
17 665c255d 2023-08-04 jrmu (append (cdr list1) list2))))
18 665c255d 2023-08-04 jrmu
19 665c255d 2023-08-04 jrmu (define (last-pair l)
20 665c255d 2023-08-04 jrmu (cond ((null? l) (error "Empty List"))
21 665c255d 2023-08-04 jrmu ((null? (cdr l)) l)
22 665c255d 2023-08-04 jrmu (else (last-pair (cdr l)))))
23 665c255d 2023-08-04 jrmu
24 665c255d 2023-08-04 jrmu (define (test-case actual expected)
25 665c255d 2023-08-04 jrmu (load-option 'format)
26 665c255d 2023-08-04 jrmu (newline)
27 665c255d 2023-08-04 jrmu (format #t "Actual: ~A Expected: ~A" actual expected))
28 665c255d 2023-08-04 jrmu
29 665c255d 2023-08-04 jrmu (define (reverse l)
30 665c255d 2023-08-04 jrmu (if (null? l)
31 665c255d 2023-08-04 jrmu '()
32 665c255d 2023-08-04 jrmu (append
33 665c255d 2023-08-04 jrmu (reverse (cdr l))
34 665c255d 2023-08-04 jrmu (list (car l)))))
35 665c255d 2023-08-04 jrmu
36 665c255d 2023-08-04 jrmu (define us-coins (list 50 25 10 5 1))
37 665c255d 2023-08-04 jrmu (define uk-coins (list 100 50 20 10 5 2 1 0.5))
38 665c255d 2023-08-04 jrmu
39 665c255d 2023-08-04 jrmu (define (cc amount coin-values)
40 665c255d 2023-08-04 jrmu (cond ((= amount 0) 1)
41 665c255d 2023-08-04 jrmu ((or (< amount 0) (no-more? coin-values)) 0)
42 665c255d 2023-08-04 jrmu (else
43 665c255d 2023-08-04 jrmu (+ (cc amount
44 665c255d 2023-08-04 jrmu (except-first-denomination coin-values))
45 665c255d 2023-08-04 jrmu (cc (- amount
46 665c255d 2023-08-04 jrmu (first-denomination coin-values))
47 665c255d 2023-08-04 jrmu coin-values)))))
48 665c255d 2023-08-04 jrmu
49 665c255d 2023-08-04 jrmu ;; Define the procedures first-denomination, except-first-denomination, and no-more? in terms of primitive operations on list structures. Does the order of the list coin-values affect the answer produced by cc? Why or why not?
50 665c255d 2023-08-04 jrmu
51 665c255d 2023-08-04 jrmu (define first-denomination car)
52 665c255d 2023-08-04 jrmu (define except-first-denomination cdr)
53 665c255d 2023-08-04 jrmu (define no-more? null?)
54 665c255d 2023-08-04 jrmu
55 665c255d 2023-08-04 jrmu ;; no, order of coin-values shouldn't matter because it doesn't matter in reali life
56 665c255d 2023-08-04 jrmu
57 665c255d 2023-08-04 jrmu (test-case (cc 100 us-coins) 292)