aboutsummaryrefslogtreecommitdiff
path: root/SICP/ch2_2_2.scm
blob: fc6ca30213ef39049e526e5ec2ecd542f34c141c (plain)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
(define x (cons (list 1 2) (list 3 4)))

(define (length x)
  (cond ((null? x) 0)
        ((not (pair? x)) 1)
        (else (+ (length (cdr x)) 1))))

(define (count-leaves x)
  (cond ((null? x) 0)
        ((not (pair? x)) 1)
        (else (+ (count-leaves (car x))
                 (count-leaves (cdr x))))))

(length x)
(count-leaves x)

;; Exercise 2.24
;; Length is wrong !!!
;; (car (cdr )) to get the left leaf

(define list-1 (list 1 (list 2 (list 3 4))))
(length list-1)
(count-leaves list-1)

;; Exercise 2.25
(car (cdr (car (cdr (cdr (list 1 3 (list 5 7) 9))))))
(car (car (list (list 7))))
(car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (list 1 (list 2 (list 3 (list 4 (list 5 (list 6 7))))))))))))))))))

;; Exercise 2.26
(define x (list 1 2 3))
(define y (list 4 5 6))

(append x y)
(car (car (cons x y)))
(car (car (list x y)))

(car (cdr (cons x y)))
(car (car (cdr (list x y))))

;; Exercise 2.27

!!! ;; Exercise2.18
(define (reverse items)
  (if (null? (cdr items))
    items
    (append (reverse (cdr items))
            (cons (car items) nil))))

(define (deep-reverse items)
  (if (null? (cdr items))
    (if (not (pair? (car items)))
      items
      (cons (deep-reverse (car items)) nil))
    (append (cond ((pair? (cdr items)) 
                   (deep-reverse (cdr items)))
                  ((pair? (car (cdr items)))
                   (cons (deep-reverse (car (cdr items))) nil))
                  ;; Some problem in else.
                  (else (deep-reverse (cdr items))))
            (cond ((pair? (car items))
                   (cons (deep-reverse (car items)) nil))
                  (else (cons (car items) nil))))))

(define y
  (list (list 1 2) (list 3 4) (list 5 6)))

(define z (list (list 1 2)))
(deep-reverse z)
(reverse z)

(reverse y)
(deep-reverse y)

(cons (deep-reverse (car (list (list 1 2)))) nil)

(deep-reverse 
  (list 1 (list 2 3) 4 (list 5 6)))

(define x
  (list (list 1 2) (list 3 4)))
(list (list 1 2) (list 3 4))
(reverse x)
(deep-reverse x)
(deep-reverse (list 3 4))
(deep-reverse (list 1 2 3))
(reverse (list 1 2 3))