zoukankan      html  css  js  c++  java
  • SICP学习笔记 第一章 (1.1)

    语言的三个机制:

    • 基本表达式 (primitive expression)
    • 组合 (combination)
    • 抽象 (abstraction)

    组合式:由括号括起的一些表达式,形成的表。表中最左边的元素称为运算符(operator),其他元素称为运算对象(operand)。

    过程定义的一般形式:(define (<name> <formal parameters>) <body>)

    应用序(application order):求值参数而后应用

    正则序(normal order):完全展开而后归约

    特殊形式(special form):

    1 (define (<name> <formal parameters>) <body>)
    2 (cond (<p1> <e1>)
    3       (<pn> <en>))
    4 (if <predicate> <consequent> <alternative>)
    5 (and <e1> ... <en>)
    6 (or <e1> ... <en>)
    7 (not <e>)

     部分习题:

    exercise 1.3

    1 (define (square-sum-of-two x y z)
    2     (+ (square (max x y))
    3        (square (max z
    4                (min x y)))))

     exercise 1.5

    1 (define (p) (p))
    2 (define (test x y)
    3     (if (= x 0)
    4         0
    5         y))
    6 (test 0 (p))

      在应用序求值中,解释器会先对各个子表达式求值。在对(p)求值时就会陷入无限循环。而正则序会先展开而后归约,(test 0 (p)) 会先展开成 if 的特殊形式,再根据 if 的求值规则:谓词部分先求值,根据谓词结果选择子表达式,这样正则序求值会返回0.

    exercise 1.6

    Lisp使用应用序求值,而new-if不是一个特殊形式,求值过程中会不断对子表达式求值形成无限循环。

    exercise 1.7

    没想明白改变值相对于猜测值的比率应该怎么表示,暂时用改变值和猜测值的差代替。

     1 (define (sqrt x)
     2     (define (good-enough? guess)
     3         (< (abs (- guess (improve guess))) 0.0001))
     4     (define (improve guess)
     5         (/ (+ guess 
     6               (/ x guess))
     7            2))
     8     (define (sqrt-iter guess)
     9         (if (good-enough? guess)
    10             guess
    11             (sqrt-iter (improve guess))))
    12     (sqrt-iter 1.0))

     exercise 1.8

     1 (define (cube-root x)
     2     (define (good-enough? guess)
     3         (< (abs (- guess (improve guess))) 0.0001))
     4     (define (improve guess)
     5         (/ (+ (/ x
     6                  (square guess))
     7               (* 2 guess))
     8            3))
     9     (define (cube-root-iter guess)
    10         (if (good-enough? guess)
    11             guess
    12             (cube-root-iter (improve guess))))
    13     (cube-root-iter 1.0))
  • 相关阅读:
    [转]eclipse转idea, 快捷键设置
    钻牛角尖还是走进死胡同--shell脚本根据名称获得 dubbo 服务的 pid
    SmartSVN has inconsistent newlines解决方法
    解决Mac java.net Local host name unknown error的方法
    Jenkins持续集成环境, 如何自定义 maven repositories
    如何用dat批处理文件关闭某端口对应程序-Windows自动化命令
    ionic 总结
    window resize的时候禁止频繁触发事件
    AJAX工作原理及其优缺点
    利用JS提交表单的几种方法和验证
  • 原文地址:https://www.cnblogs.com/sungoshawk/p/2743904.html
Copyright © 2011-2022 走看看