CG@CPPBLOG

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

我的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 on 2008-07-02 00:08 cuigang 阅读(1093) 评论(1)  编辑 收藏 引用 所属分类: Lisp/Scheme我的SICP答案

评论

# re: 我的SICP习题答案(2.36~2.39)  回复  更多评论   

终于追完你的 SICP答案了,一年前看完第一章就感觉看不下去了,现在看到模块化设计,感觉自己终于突破写程序的一个瓶颈了。暗暗感到后面还有好东西:-)
2014-03-19 10:49 | shumj

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理