zoukankan      html  css  js  c++  java
  • 《sicp》模块化程序设计 笔记

    《sicp》模块化程序设计

    2.2.3 序列作为一种约定界面 学习笔记

    这节中,讲述了一种模块化的程序设计思想,也就是将程序设计为如同信号处理过程一样,采用级联的方式将程序各个部分组合在一起,程序的每一部分对应于一个处理过程,并通过约定的界面将程序各个部分连接在一起.在本节中将序列作为一种约定界面.

    实例

    给定自然数n,找到所有的有序队i和j (i,j小于等于n大于等于0) ,其中i小于j , 使得i+j为素数.

    分析

    如采用模块化设计,可以将程序分为以下几个部分

    1.列出所有的有序对,并用序列组织起来
    2.过滤掉序列中不满足和为素数的有序对.
    3.将序列中每个序队的和添加进序对组成三元组,输出最后结果

    1.生成所有有序对

    生成方法:对每个i小于等于n,枚举出所有的整数 j小于i ,并对每一对i和j生成序对 (i,j).

    
    (define ( accumulate op initial sequence)
     (if (null? sequence)
         initial
         (op (car sequence)  (accumulate op initial (cdr sequence)) )
     )
    )
    (define (emuerate-interval low high) 
      (if (> low high)
          '()
          (cons low (emuerate-interval (+ low 1) high))
      )
    )
    (define (unique-pairs  n) 
     (accumulate append '() 
       (map (lambda (x)
    		  (map (lambda (y)  (list  x y )) 
    		       (emuerate-interval 1 (- x 1) )
    		  )
    		)
    	(emuerate-interval 1 n) )
     )
    )
    
    

    2.过滤序列

    过滤模板程序

    (define (filter predicate sequence)
        (cond ((null? sequence) '())
    	      ((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence))))
    	      (else (filter predicate (cdr sequence)))
        )
    )
    
    (define (prime-sum?  pair) 
     (prime? (+ (car pair)  (cadr pair)))
    )
    

    3.组合结果

    (define (make-pair-sum l)
     (map (lambda (pair) (list (car pair) (cadr pair) (+ (car pair) (cadr pair)))) l  )
    )
    

    最终程序

    (define (prime-sum-pairs n)
     (make-pair-sum 
         (filter prime-sum? 
    		 (unique-pairs n))
     )
    )
    
  • 相关阅读:
    pgspider sqlite mysql docker 镜像
    pgspider docker 镜像
    pgspider基于pg 的高性能数据可视化sql 集群引擎
    diesel rust orm 框架试用
    golang 条件编译
    Performance Profiling Zeebe
    bazel 学习一 简单java 项目运行
    一个好用node http keeplive agnet
    gox 简单灵活的golang 跨平台编译工具
    mailhog 作为smtp server mock工具
  • 原文地址:https://www.cnblogs.com/battzion/p/4354568.html
Copyright © 2011-2022 走看看