aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SICP/ch2_2_2.scm46
-rw-r--r--SICP/tmp.scm199
-rw-r--r--dotfiles/.vimrc.bundles.local1
3 files changed, 180 insertions, 66 deletions
diff --git a/SICP/ch2_2_2.scm b/SICP/ch2_2_2.scm
index fc6ca30..ca83c07 100644
--- a/SICP/ch2_2_2.scm
+++ b/SICP/ch2_2_2.scm
@@ -85,3 +85,49 @@
(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)
diff --git a/SICP/tmp.scm b/SICP/tmp.scm
index aed388f..ca83c07 100644
--- a/SICP/tmp.scm
+++ b/SICP/tmp.scm
@@ -1,66 +1,133 @@
-(define (gcd a b)
- (if (= b 0)
- a
- (gcd b (remainder a b))))
-;(define (make-rat n d) (cons n d))
-(define (make-rat n d)
- (let ((g (gcd n d)))
- (cons (/ n g)
- (/ d g))))
-
-(define (numer x) (car x))
-(define (denom x) (cdr x))
-
-(define (add-rat x y)
- (
- make-rat (+ (* (numer x) (denom y))
- (* (numer y) (denom x)))
- (* (denom x) (denom y))))
-
-(define (sub-rat x y)
- (make-rat (- (* (numer x) (denom y))
- (* (numer y) (denom x)))
- (* (denom x) (denom y))))
-
-(define (mul-rat x y)
- (make-rat (* (numer x) (numer y))
- (* (denom x) (denom y))))
-
-(define (div-rat x y)
- (make-rat (* (numer x) (denom y))
- (* (denom x) (numer y))))
-
-(define (equal-rat? x y)
- (= (* (numer x) (denom y))
- (* (numer y) (denom x))))
-
-(define (print-rat x)
- (newline)
- (display (numer x))
- (display "/")
- (display (denom x)))
-
-(define one-half (make-rat 1 2))
-(print-rat one-half)
-
-(define one-third (make-rat 1 3))
-(print-rat one-third)
-
-(print-rat
- (mul-rat one-half one-third))
-
-(print-rat
- (add-rat one-third one-third))
-
-(print-rat
- (make-rat -1 1))
-
-(define (print-point p)
- (newline)
- (display "(")
- (display (x-point p))
- (display ",")
- (display (y-point p))
- (display ")"))
-
-(define ())
+(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))
+
+;; 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)
diff --git a/dotfiles/.vimrc.bundles.local b/dotfiles/.vimrc.bundles.local
index f80a68d..83435c8 100644
--- a/dotfiles/.vimrc.bundles.local
+++ b/dotfiles/.vimrc.bundles.local
@@ -1,3 +1,4 @@
Plugin 'vim-airline/vim-airline-themes'
Plugin 'sji/tslime.vim'
Plugin 'rainbow_parentheses.vim'
+Plugin 'vim-scripts/paredit.vim'