diff options
| author | Steve Lee <me@xiangyangli.com> | 2017-12-02 06:10:20 +0800 |
|---|---|---|
| committer | Steve Lee <me@xiangyangli.com> | 2017-12-02 06:10:20 +0800 |
| commit | 9b939e65cf007e859dabe5de6b31d255d647e0ce (patch) | |
| tree | bf9229755f4e58bb81add73c7f3c32fe4023e7ec /Computer_Science/SICP/ch2_2_2.scm | |
| parent | 5dc061ae68ac3b5b28556bdbd1574579d8da33e7 (diff) | |
| download | 42-9b939e65cf007e859dabe5de6b31d255d647e0ce.tar.xz 42-9b939e65cf007e859dabe5de6b31d255d647e0ce.zip | |
category
Diffstat (limited to 'Computer_Science/SICP/ch2_2_2.scm')
| -rw-r--r-- | Computer_Science/SICP/ch2_2_2.scm | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Computer_Science/SICP/ch2_2_2.scm b/Computer_Science/SICP/ch2_2_2.scm new file mode 100644 index 0000000..fbcf46d --- /dev/null +++ b/Computer_Science/SICP/ch2_2_2.scm @@ -0,0 +1,134 @@ +(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 z (list 1 1 1)) +(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)) + +;; Exercise2.28 + +(define (fringe items) + (if (not (pair? items)) + (list items) + (append (fringe (car items)) + (if (null? (cdr items)) + nil + (fringe (cdr items)))))) + + +(append (list 3) (list 4)) +(append (list 4) nil) +(append nil (list 4)) +(list 4) +(list 3 4) +(list nil) +(append (list nil) (list nil)) + +(define x + (list (list 1 2) (list 3 4))) +(fringe x) +(fringe (list x x)) +(list 1 2 3 4) +(list 1 2 3 4 1 2 3 4) + +(append (list 2) (list 3)) +(list 2 3) +(list (list 1 2) (list 3 4)) +(list (list 1 2) 3 4) + +;; Exercise2.29 + +(define (make-mobile left right) + (list left right)) + +(define (make-branch length structure) + (list length structure)) + +(define (left-branch mobile) + (car (mobile))) +(define (right-branch mobile) + (cdr (mobile))) + +(define branch-length) |
