• SICP_2.7-2.11


    
    
    (define (make-interval x y)
      (cons x y))
    
    (define (add-interval x y)
      (make-interval (+ (lower-bound x) (lower-bound y))
                    (+ (upper-bound x) (upper-bound y))))
    
    ;;;;;;;;;;;;;;;2.7
    (define (upper-bound inter)
      (cdr inter))
    
    (define (lower-bound inter)
      (car inter))
    ;;;;;;;;;;;;;;2.8
    (define (sub-interval x y)
      (add-interval x
                    (make-interval (- (upper-bound y))
                                  (- (lower-bound y)))))
    
    ;;;;;;;;;;;;;;2.9
    (define (width-interval x)
      (/ (- (upper-bound x) (lower-bound x)) 2))
    
    ;(width-interval (add-interval x y)) (1)
    ;(width-interval (sub-interval x y))  (2)
    ;(+ (width-interval x) (width-interval y)) (3)
    ;(- (width-interval x) (width-interval y)) (4)
    ;
    ;(1) (3)是等价的
    ;(width-interval (mul-interval x y)) (5)
    ;(* (width-interval x) (width-interval y)) (6)
    ;(5) (6) 不等价
    
    ;;;;;;;;;;;2.10
    (define (div-interval x y)
      (if (< (* (upper-bound y) (lower-bound y)) 0)
          (error "division interval isn't right")
          (mul-interval x
                        (make-interval (/ 1.0 (upper-bound y))
                                       (/ 1.0 (lower-bound y))))))
    
    ;;;;;;;;;2.11
    (define (mul-interval x y)
      (let ((xl (lower-bound x))
            (xu (upper-bound x))
            (yu (upper-bound y))
            (yl (lower-bound y)))
        (cond ((and (< xl 0) (< xu 0)) (cond ((and (< yl 0) (< yu 0))
                                              (make-interval
                                               (* xu yu) (* xl yl)))
                                              ((and (< yl 0) (> yu 0))
                                              (make-interval
                                               (* xl yu) (* xl yl)))
                                              ((and (> yl 0) (> yu 0))
                                              (make-interval
                                               (* xl yu) (* xu yl)))))
              ((and (< xl 0) (> xu 0)) (cond ((and (< yl 0) (< yu 0))
                                              (make-interval
                                               (* xu yl) (* xl yl)))
                                             ((and (< yl 0) (> yu 0))
                                              (make-interval
                                               (* xl yu) (* xu yu)))
                                             ((and (> yl 0) (> yu 0))
                                              (make-interval
                                               (* xl yu) (* xu yu)))))
              ((and (> xl 0) (> xu 0)) (cond ((and (< yl 0) (< yu 0))
                                              (make-interval
                                               (* xu yl) (* xl yu)))
                                             ((and (< yl 0) (> yu 0))
                                              (make-interval
                                               (* xu yl) (* xu yu)))
                                             ((and (> yl 0) (> yu 0))
    (make-interval (
    * xl yl) (* xu yu))))))) ;;;;;;;;;;;;;;;改成这种形式可能是因为当乘法代价比较高时 ;;;;;;;;;;;;;;;可以提高效率
    Yosoro
  • 相关阅读:
    区块链钱包应用如何开发
    区块链钱包开发什么是区块链钱包
    FileFilter, FilenameFilter用法和文件排序
    买了个空间玩
    MapReduce
    Java学习笔记六:多态
    Java学习笔记五:复用类
    Java学习笔记二:初始化(三)
    Java学习笔记二:初始化(二)
    Java学习笔记四:static关键字
  • 原文地址:https://www.cnblogs.com/tclan126/p/6379366.html
Copyright © 2020-2023  润新知