Skip to content

Commit 4186352

Browse files
committed
..
1 parent 8cf1e20 commit 4186352

File tree

9 files changed

+1167
-7
lines changed

9 files changed

+1167
-7
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ some codes about sicp
55

66
- 过程也是一等公民。过程作为参数传递爽歪歪,在ch1的cons中看到的procedure表示法还是蛮神奇的,所谓过程即数据,在丘奇计数中也高潮不断,于是技痒在ch2的用树结构表示集合也用了list和procedure两种表示法。
77

8-
- 抽象的魔力。当我们用不同的底层去实现一种数据结构比如树时,我们不必在意其实现细节,屏蔽作用使得如果我们改变底层实现不必去改动高层的代码(前提是你在实现高层代码时不考虑底层的细节
8+
- 抽象。当我们用不同的底层去实现一种数据结构比如树时,我们不必在意其实现细节,屏蔽作用使得如果我们改变底层实现不必去改动高层的代码(前提是你在实现高层代码时不考虑底层的细节
99

10-
- 递归的魔力。说来最近写到ch2才回过头去品味迭代过程和递归过程,虽然scheme实现迭代时一般也是递归语法,但这和我们平时说的递归(计算)不甚相同。迭代只需常量栈空间,记录的只是常数个参数。其实递归讲道理也是一种美妙的抽象,它屏蔽了下一层的实现细节,你只需要考虑当前层和下一层的关系,再弄个出口就o**k了。
10+
- 递归。说来最近写到ch2才回过头去品味迭代过程和递归过程,虽然scheme实现迭代时一般也是递归语法,但这和我们平时说的递归(计算)不甚相同。迭代只需常量栈空间,记录的只是常数个参数。其实递归讲道理也是一种美妙的抽象,它屏蔽了下一层的实现细节,你只需要考虑当前层和下一层的关系,再弄个出口就o**k了。
1111

1212
- 尾递归可以优化成循环,这也可以稍稍看出递归和循环的微妙关系。
1313

chapter3/sicp_3.5.4.txt

+9-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
����solveʱ�����⣬�������Ľ������define�˸�fake dy��Ȼ����set!������������Խ������ͷһ�룬���delay�о���������ô��ʵ��delay��(define y (integral (delay dy) 1 0.001) ���dy����λ�ڸñ���ʽ֮��y�����;���<#undefined>����������֮ǰ(define dy 'fake-dy)Ȼ������y�Ķ���ʽ֮��(set! dy (stream-map f y))��û�����⣬���delay��ȷȷʵʵ��delay����Ӧ���Dz���delay��exp�Ǻ�ֵ������Ӱ��y�����ͣ���Ȼ�������ҿ�������ע199Ҳ�����scheme�����ڲ������ʵ���й�ϵ����ž�����˵�Ŀ�����scheme��top-level�뺯���������ְ�������ɡ����ᵽ��д�ݹ��parser combinator�������������⣬�Ժ��л���������ɡ����ڻ���û��״̬����ִ�����ҳ��𰸣�ȴû��ȥ����˼������ԭ�򣬻���Ҫ�������ˮƽ����
1+
����solveʱ�����⣬�������Ľ������define�˸�fake dy��Ȼ����set!��������
2+
����Խ������ͷһ�룬���delay�о���������ô��ʵ��delay��(define y
3+
(integral (delay dy) 1 0.001) ���dy����λ�ڸñ���ʽ֮��y�����;���
4+
<#undefined>����������֮ǰ(define dy 'fake-dy)Ȼ������y�Ķ���ʽ֮��(set!
5+
dy (stream-map f y))��û�����⣬���delay��ȷȷʵʵ��delay����Ӧ���Dz���
6+
delay��exp�Ǻ�ֵ������Ӱ��y�����ͣ���Ȼ�������ҿ�������ע199Ҳ�����
7+
scheme�����ڲ������ʵ���й�ϵ����ž�����˵�Ŀ�����scheme��top-level�뺯
8+
���������ְ�������ɡ����ᵽ��д�ݹ��parser combinator�������������⣬
9+
�Ժ��л���������ɡ�����Ҫ�������ˮƽ��...

chapter5/5.2/5.2.1-basic-machine.ss

+8-4
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,18 @@
4646
;
4747
(define (dispatch message)
4848
(cond ((eq? message 'start)
49-
...)
49+
(set-contents! pc the-instruction-sequence)
50+
(excute))
5051
((eq? message 'install-instruction-sequence)
5152
(lambda (seq)
5253
(set! the-instruction-sequence seq)))
53-
((eq? message 'allocate-register) ...)
54-
((eq? message 'get-register) ...)
54+
((eq? message 'allocate-register)
55+
allocate-register)
56+
((eq? message 'get-register)
57+
lookup-register)
5558
((eq? message 'install-operations)
56-
...)
59+
(lambda (ops)
60+
(set! the-ops (append ops the-ops))))
5761
((eq? message 'stack) stack)
5862
((eq? message 'operations) the-ops)
5963
(else

justforfun/_.ss

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
(define (copy lis)
2+
(if (null? lis)
3+
'()
4+
(cons (car lis) (copy (cdr lis)))))
5+
;
6+
(define a '(1 2 3))
7+
(define ca (copy a))
8+
(set-car! ca 'xixi)
9+
(display ca)
10+
(newline)
11+
(display a)
12+
;
13+
;use lambda to accumulate the elements
14+
(define (copy-1 lis)
15+
(define (iter rest recieve)
16+
(if (null? rest)
17+
(recieve '())
18+
(iter (cdr rest)
19+
(lambda (cdr_)
20+
(recieve (cons (car rest) cdr_))))))
21+
(iter lis
22+
(lambda (cdr_)
23+
cdr_)))

justforfun/__/stack.ss

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
;stack
2+
(define (make-stack)
3+
(let ((stack '()))
4+
(define (empty?)
5+
(null? stack))
6+
(define (pop)
7+
(if (null? stack)
8+
(error "stack is empty! -- POP")
9+
(begin ;(display (car stack))
10+
;(display "[pop operation] ")
11+
(set! stack (cdr stack)))))
12+
(define (top)
13+
(if (empty?)
14+
(error "stack is empty! -- TOP")
15+
(car stack)))
16+
(define (push x)
17+
(set! stack (cons x stack)))
18+
(define (dispatch message)
19+
(cond ((eq? message 'pop)
20+
pop)
21+
((eq? message 'push)
22+
push)
23+
((eq? message 'clear)
24+
clear)
25+
((eq? message 'empty?)
26+
empty?)
27+
((eq? message 'top)
28+
top)
29+
(else (error "no such operation! -- STACK"))))
30+
(define (clear)
31+
(set! stack '()))
32+
dispatch))
33+
;
34+
(define (pop stack)
35+
((stack 'pop)))
36+
(define (push x stack)
37+
((stack 'push) x))
38+
(define (clear stack)
39+
((stack 'clear)))
40+
(define (_empty? stack)
41+
((stack 'empty?)))
42+
(define (top stack)
43+
((stack 'top)))
44+
;

justforfun/__/test.ss

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
(define tree-1
2+
(make-tree
3+
'a
4+
(make-tree 'b (make-tree 'c '() '()) '())
5+
(make-tree 'd
6+
(make-tree 'e
7+
(make-tree 'f '() '())
8+
(make-tree 'g '() '()))
9+
(make-tree 'h
10+
(make-tree 'i '() '())
11+
(make-tree 'j '() '())))))
12+
;
13+
(define test-stack #f)
14+
(define stack (make-stack))
15+
(if test-stack
16+
(begin
17+
;(define stack (make-stack))
18+
(push 'a stack)
19+
(push 'b stack)
20+
(push 'c stack)
21+
(push 'd stack)
22+
(pop stack)
23+
(push 'e stack)
24+
;(clear stack)
25+
(pop stack)
26+
(pop stack)
27+
(pop stack)
28+
;(pop stack)
29+
(pop stack)))

justforfun/__/tree.ss

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
;(root left-child right-child)
2+
;interfaces
3+
(define (root tree) (car tree))
4+
(define (left tree) (cadr tree))
5+
(define (right tree) (caddr tree))
6+
;
7+
(define (preorder tree)
8+
(if (null? tree)
9+
'done
10+
(begin
11+
(display (root tree))(display " ")
12+
(preorder (left tree))
13+
(preorder (right tree))
14+
)))
15+
(define (inorder tree)
16+
(if (null? tree)
17+
'done
18+
(begin
19+
(inorder (left tree))
20+
(display (root tree))(display " ")
21+
(inorder (right tree))
22+
)))
23+
(define (postorder tree)
24+
(if (null? tree)
25+
'done
26+
(begin
27+
(postorder (left tree))
28+
(postorder (right tree))
29+
(display (root tree))(display " ")
30+
)))
31+
;
32+
(define (make-tree a b c)
33+
(list a b c))
34+
;
35+
(display "visit by recursion\n")
36+
(load ".//test.ss")
37+
(display "preorder\n")
38+
(preorder tree-1)(newline)
39+
(display "inorder\n")
40+
(inorder tree-1)(newline)
41+
(display "postorder\n")
42+
(postorder tree-1)(newline)
43+
(display "--------seperator--------\n")

0 commit comments

Comments
 (0)