File tree 9 files changed +1167
-7
lines changed
9 files changed +1167
-7
lines changed Original file line number Diff line number Diff line change @@ -5,9 +5,9 @@ some codes about sicp
5
5
6
6
- 过程也是一等公民。过程作为参数传递爽歪歪,在ch1的cons中看到的procedure表示法还是蛮神奇的,所谓过程即数据,在丘奇计数中也高潮不断,于是技痒在ch2的用树结构表示集合也用了list和procedure两种表示法。
7
7
8
- - 抽象的魔力 。当我们用不同的底层去实现一种数据结构比如树时,我们不必在意其实现细节,屏蔽作用使得如果我们改变底层实现不必去改动高层的代码(前提是你在实现高层代码时不考虑底层的细节
8
+ - 抽象 。当我们用不同的底层去实现一种数据结构比如树时,我们不必在意其实现细节,屏蔽作用使得如果我们改变底层实现不必去改动高层的代码(前提是你在实现高层代码时不考虑底层的细节
9
9
10
- - 递归的魔力 。说来最近写到ch2才回过头去品味迭代过程和递归过程,虽然scheme实现迭代时一般也是递归语法,但这和我们平时说的递归(计算)不甚相同。迭代只需常量栈空间,记录的只是常数个参数。其实递归讲道理也是一种美妙的抽象,它屏蔽了下一层的实现细节,你只需要考虑当前层和下一层的关系,再弄个出口就o** k了。
10
+ - 递归 。说来最近写到ch2才回过头去品味迭代过程和递归过程,虽然scheme实现迭代时一般也是递归语法,但这和我们平时说的递归(计算)不甚相同。迭代只需常量栈空间,记录的只是常数个参数。其实递归讲道理也是一种美妙的抽象,它屏蔽了下一层的实现细节,你只需要考虑当前层和下一层的关系,再弄个出口就o** k了。
11
11
12
12
- 尾递归可以优化成循环,这也可以稍稍看出递归和循环的微妙关系。
13
13
Original file line number Diff line number Diff line change 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
+ �Ժ��л���������ɡ�����Ҫ�������ˮƽ��...
Original file line number Diff line number Diff line change 46
46
;
47
47
(define (dispatch message )
48
48
(cond ((eq? message 'start )
49
- ...)
49
+ (set-contents! pc the-instruction-sequence)
50
+ (excute))
50
51
((eq? message 'install-instruction-sequence )
51
52
(lambda (seq )
52
53
(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)
55
58
((eq? message 'install-operations )
56
- ...)
59
+ (lambda (ops )
60
+ (set! the-ops (append ops the-ops))))
57
61
((eq? message 'stack ) stack)
58
62
((eq? message 'operations ) the-ops)
59
63
(else
Original file line number Diff line number Diff line change
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_)))
Original file line number Diff line number Diff line change
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
+ ;
Original file line number Diff line number Diff line change
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)))
Original file line number Diff line number Diff line change
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 " )
You can’t perform that action at this time.
0 commit comments