-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2.28.scm
50 lines (43 loc) · 1002 Bytes
/
2.28.scm
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
#lang scheme/base
(define (deep-reverse l)
(define (reverse-iter c l)
(cond ((null? l) c)
((list? (car l)) (reverse-iter (cons (reverse-iter '() (car l)) c) (cdr l)))
(else (reverse-iter (cons (car l) c) (cdr l)))
)
)
(reverse-iter '() l)
)
;(deep-reverse '( 1 2 (3 4 5)))
(define (fringe-iter l r)
(cond ((pair? l) (fringe-iter (car l) (fringe-iter (cdr l) r)))
((null? l) r)
(else (cons l r))
)
)
(define x (list (list 1 2) (list 3 4)))
(fringe-iter (list x x) '())
(define (make-mobile left right)
(list left right))
(define (make-branch length structure)
(list length structure)
)
(define (left-branch m)
(car m)
)
(define (right-branch m)
(car (cdr m))
)
(define (branch-length b)
(car b)
)
(define (branch-structure b)
(car (cdr b))
)
(define (total-weight t)
(cond ((pair? t) t)
(else (+ (total-weight (left-branch t)) (total-weight (right-branch t))))
)
)
(define t (make-mobile 1 2))
(right-branch t)