首页 > 其他 > 详细

SICP: 第二章之序列操作:程序的共性

时间:2015-04-20 22:36:16      阅读:272      评论:0      收藏:0      [点我收藏+]

技术分享

 

#lang racket

;guo lv qi
(define (filter predicate sequence)
  (cond ((null? sequence) ())
    ((predicate (car sequence))
     (cons (car sequence)
           (filter predicate (cdr sequence))))
    (else (filter predicate (cdr sequence)));else
    );cond
  );filter

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
      (accumulate op initial (cdr sequence))));if
  );accumulate

;mei ju int low~high
(define (enumerate-interval low high)
  (if (> low high)
      ()
      (cons low (enumerate-interval (+ low 1) high)))
  );enumerlate-interval

;mei ju trees leaf
(define (enumerate-tree-leaf tree)
  (cond ((null? tree) ())
    ((not (pair? tree)) (list tree))
    (else (append (enumerate-tree-leaf (car tree))
              (enumerate-tree-leaf (cdr tree)))));cond
  );enumerate-tree-leaf

;append
(define (append lst1 lst2)
  (if (null? lst1)
      lst2
      (cons (car lst1) (append (cdr lst1) lst2)));if
  );append

;(enumerate-tree-leaf (list 1 (list 2 (list 3 4)) 5))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (sum-odd-squares tree)
  (accumulate + 
          0 
          (map (lambda (x)(* x x))
           (filter odd?
              (enumerate-tree-leaf tree));flter
           );map
          );accumulate
  );sum-odd-squares

(define (odd? a)
  (= 1 (remainder a 2))
  );odd?

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (even-fibs n)
  (accumulate cons
         ()
         (filter (lambda(x) (not (odd? x)))
             (map fib
              (enumerate-interval 0 n)));filter
   );accumulate
  );even-fib

(define (fib n)
  (define (fib-iter a b count)
    (if (= count 0)
    a
    (fib-iter b (+ a b) (- count 1))
     );if
    );fib-iter
  (fib-iter 0 1 n)
  );fib

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define (list-fib-square n)
  (accumulate cons
          ()
          (map (lambda (x) (* x x))
           (map fib
            (enumerate-interval 0 n))));accumulate
  );list-fib-square

(define tree (list 1 (list 2 (list 3 4))))
(sum-odd-squares tree)

(even-fibs 10)

(list-fib-square 10)

 

SICP: 第二章之序列操作:程序的共性

原文:http://www.cnblogs.com/wizzhangquan/p/4442776.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!