码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-20 22:38:28      阅读:169      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!