CG@CPPBLOG

/*=========================================*/
随笔 - 76, 文章 - 39, 评论 - 137, 引用 - 0
数据加载中……

一晃一年过去了

一晃一年多过去了,公司项目很紧张,没什么时间学习,scheme学习扔了将近两年,曾经的SICP学习计划严重延期了。期间有朋友给我留言都没有时间回复,或许忙已经成为借口了,还是回来再继续吧。

posted @ 2010-02-07 15:11 cuigang 阅读(706) | 评论 (1)编辑 收藏

In the USA - 4

已经回到深圳一个月了,去美国的事情几乎记不起来了,感觉好像做了一场梦似的,还是这里更真实,更喜欢中国。SICP学习已经中断了好久了,也该重新捡起来了。

posted @ 2008-10-26 15:28 cuigang 阅读(536) | 评论 (3)编辑 收藏

In the USA - 3

转眼就好几周过去了,整天无所事事的不知道干啥,语言是最大的障碍,学了十年的英文仍然跟白痴一般。

顿顿都吃着麦当劳、肯德基、必胜客类似的东西,搞得恶心透顶了,能吃碗面或者炒个菜就好了,不用整天跟牛一样啃生菜。

没有车在美国寸步难行,几乎没有公共交通工具,1个小时一班的bus坐满了黑人和墨西哥人,火车稍微好点,但我这地方太偏僻了,要走一个小时才到火车站。

去了纽约,大瀑布,不是很激动,比较沉默。


posted @ 2008-09-12 23:24 cuigang 阅读(504) | 评论 (0)编辑 收藏

In the USA - 2

没地方抽烟,几乎所有的室内都 No smoking,大街上找不到垃圾桶,烟头不知道往哪扔。
美国人不睡午觉,我中午就犯困。
他们对棒球的兴趣看来比奥运会大。
上班不打卡,公司没有保安,人很少,地方很大,几乎每个人一个房间。
干什么都要付小费。

posted @ 2008-08-15 01:30 cuigang 阅读(483) | 评论 (1)编辑 收藏

In the USA - 1

象折磨一般,填表填表、安检安检,断断续续持续了一个月,终于踏上了美利坚合众国的土地,16个小时的飞机比坐硬座痛苦多了,坐在酒店来接机的小车里,整个人象磕了药一样,恍恍惚惚的看着窗外的纽约,Big 是唯一的感受,车大、路宽、交通指示牌牌大字大,连到处悬挂的美国国旗都硕大无比,在国内从来没有见过如此尺寸的旗子。

用西北人的话来说,这里野哄哄的。

posted @ 2008-08-13 09:13 cuigang 阅读(1414) | 评论 (3)编辑 收藏

我的SICP习题答案(2.36~2.39)

2.36
(define s (list (list 1 2 3)(list 4 5 6)(list 7 8 9)(list 10 11 12)))
(define (accumulate-n op init seqs)
  (if (null? (car seqs)) null
      (cons (accumulate op init (map# (lambda(x) (car x)) seqs))
            (accumulate-n op init (map# (lambda(x) (cdr x)) seqs)))))

2.38
;> (fold-right / 1 (list 1 2 3))
;
3/2
;
> (fold-left / 1 (list 1 2 3))
;
1/6
;
> (fold-right list null (list 1 2 3))
;
(1 (2 (3 ())))
;
> (fold-left list null (list 1 2 3))
;
(((() 1) 2) 3)

; (fold-right op i (a b c)) = (op a (op b (op c i)))
;
 (fold-left op i (a b c))  = (op (op (op i a) b) c)

要 fold-right 和 fold-left 得到相同的结果,显然需要 op 满足交换律。

2.39
(define (reverse-1 seqs)
  (fold-right (lambda(x y) (append y (list x))) null seqs))
(define (reverse-
2 seqs)
  (fold-left (lambda(x y) (cons y x)) null seqs))


posted @ 2008-07-02 00:08 cuigang 阅读(1092) | 评论 (1)编辑 收藏

我的SICP习题答案(2.33~2.35)

2.33

(define (map+ p seque)
  (accumulate (lambda(x y) (cons (p x) y)) null seque))

(define (append seq1 seq2)
  (accumulate cons seq2 seq1))

(define (length seque)
  (accumulate (lambda(x y) (+ 
1 y)) 0 seque))

2.34

(define (horner-eval x coeff-seque)
  (accumulate (lambda(this-coeff higher-coeff) 
                (+ this-coeff (* x higher-coeff)))
              
0 coeff-seque))

2.35

(define (count-leaves+ t)
  (accumulate + 
0 (map (lambda(x)
                         (if (pair? x) (count-leaves+ x) 
1))
                       t)))


posted @ 2008-06-24 00:21 cuigang 阅读(704) | 评论 (0)编辑 收藏

我的SICP习题答案(2.27~2.32)

2.27
(define (deep-reverse lst)
  (define (iter lst-o lst-d)
    (cond ((null? lst-o) 
           lst-d)
          ((not (pair? (car lst-o))) 
           (iter (cdr lst-o)
                 (cons (car lst-o) lst-d)))
          (else 
           (iter (cdr lst-o) 
                 (cons (deep-reverse (car lst-o))
                       lst-d)))))
  (iter lst null))

2.28
(define (fringe x)
  (define (iter tree lst)
    (cond ((null? tree) lst)
          ((not (pair? tree)) (cons tree lst))
          (else (iter (car tree) (iter (cdr tree) lst)))))
  (iter x null))

2.30
(define (square-tree- x)
  (cond ((null? x) null)
        ((not (pair? x)) (* x x))
        (else (cons (square-tree- (car x))
                    (square-tree- (cdr x))))))
(define (square-tree x)
  (map (lambda(subtree)
         (if (pair? subtree)
             (square-tree subtree)
             (* subtree subtree)))
       x))

2.31
(define (tree-map proc tree)
  (map (lambda(subtree)
         (if (pair? subtree)
             (tree-map proc subtree)
             (proc subtree)))
       tree))
(define (square-tree+ tree)
  (tree-map (lambda(x) (* x x)) tree))

2.32
(define (subsets s)
  (if (null? s)
      (list null)
      (let ((rest (subsets (cdr s))))
        (append rest (map (lambda(x) (cons (car s) x)) rest)))))

和换零钱问题的思路是一样的,对于一个集合的所有子集的集合,可以分为两部分,含有第一个元素和不含第一个元素的集合。而且含第一个元素的所有子集除去第一个元素,恰好正是所有不含第一个元素的子集。

也可以换个思路,对于集合A,设它可以表示为 (a1)∪(a2,...,an) ,而 (a2,...,an) 的所有子集的集合是 B=(B1,...Bm),那么可以证明A的所有子集的集合 C=B∪((A1)∪B1,(A1)∪B2,...,(A1)∪Bm);
证明:设 X 是 A 的一个子集,那么如果 a1∈X,那么 X
((A1)∪B1,(A1)∪B2,...,(A1)∪Bm),否则X∈B,所以
   
X∈C



posted @ 2008-06-17 23:48 cuigang 阅读(1279) | 评论 (4)编辑 收藏

我的SICP习题答案(2.24~2.26)

2.24



2.25

(car (cdaddr (list 1 3 (list 5 79)))
(caar (list (list 
7)))
(cadadr (cadadr(cadadr (list 
1 (list 2 (list 3 (list 4 (list 5 (list 6 7)))))))))

2.26

(1 2 3 4 5 6)
((
1 2 34 5 6)
((
1 2 3) (4 5 6))




posted @ 2008-06-11 23:39 cuigang 阅读(607) | 评论 (0)编辑 收藏

我的SICP习题答案(2.17~2.23)

2.17

(define (last-pair lst)
  (if (null? (cdr lst))
      (cons (car lst) ())
      (last-pair (cdr lst))))

2.18


(define (reverse lst)
  (define (iter lst-o lst-d)
    (if (null? lst-o)
        lst-d
        (iter (cdr lst-o) (cons (car lst-o) lst-d))))
  (iter lst null))

2.20

(define (same-parity x . lst)
  (define (filter lst ok?)
    (if (null? lst)
        ()
        (if (ok? (car lst))
            (cons (car lst) (filter (cdr lst) ok?))
            (filter (cdr lst) ok?))))
  (if (even? x)
      (cons x (filter lst (lambda(x) (= 0 (remainder x 2)))))
      (cons x (filter lst (lambda(x) (= 1 (remainder x 2)))))))

2.21

(define (square-list- items)
  (if (null? items)
      ()
      (cons (* (car items) (car items))
            (square-list- (cdr items)))))

(define (square-list items)
  (map (lambda(x) (* x x)) items))

2.22

第一种每次取出首元素平方后前插到新表,象reverse过程类似,所以是反的。
第二种只不过是把新表前插到元素前,得到的甚至不是一个list,而是
  ((((() . 1) . 4) . 9) . 16)

2.23

(define (for-each proc items)
  (if (not (null? items))
      ((lambda() (proc (car items))
       (for-each proc (cdr items))))))

posted @ 2008-06-11 22:56 cuigang 阅读(850) | 评论 (2)编辑 收藏

仅列出标题
共8页: 1 2 3 4 5 6 7 8