zoukankan      html  css  js  c++  java
  • SICP: 第二章之序列操作:程序的共性

    #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 tree's 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)
  • 相关阅读:
    【转】python装饰器
    【原】python异步学习
    【转】Docker学习_本地/容器文件互传(5)
    【原】容灾/容错概念理解
    【原】thinkphp实现存储session至redis
    【原】thinkphp修改Redis操作类,支持选择数据库功能及添加其他方法
    高性能CSS(三)
    Free Code Camp社区对数百计编程学习者进行的统计希望告诉你什么?
    最精简24L01程序--发送
    金日
  • 原文地址:https://www.cnblogs.com/wizzhangquan/p/4442776.html
Copyright © 2011-2022 走看看