..

Scheme_study

组合式的求值

运算符加上参数,用括号括起来

环境

定义的默认运算符

define的用法

define是一种特殊形式,语法为

(define (<name> <parameters>)  <body> 
)
//1.平方举例
(define (square x) (* x x)  )
//2.x的平方和y的平方和举例(x^2+y^2)
(define (sum-of-squares x y)
  (+ (square x) (square y))  
)

代换模型

将变量代换为实际的值,并用来推算求值(手动或者是打印解释器日志)

条件判断

关键字是cond(表示“条件”)

(define (abs x)
	(cond ((> x 0)  x)
   			((= x 0)  0)
        ((< x 0) (-x) )
  )  
)

(define (abs x)
	(cond ( (< x 0) (-x)
         (else x) 
        )
  )  
)

//cond的一般性形式为(p是谓词,或者说一个表达式,将被解释为true或者false)
(cond (<p1> <e2>)
      (<p2> <e3>)
      (<pN> <eN>)
)

还可以使用if if只有两个条件,若pre为真,则求出con里的值并返回,否则求出al的值并返回

(if <predicate> <consequent> <alternative>)

//举例
(define (abs x)
	(if (<x 0))
)

其他谓词

and/or/not

(and <e1> <e2> <eN>)
(or <e1> <e2> <eN>)
(not <e>)

使用牛顿迭代法求平方根

//x的平方根的值有一个猜测y(第一个y一般为1
//那么求出yx/y的平均值(更接近实际的平方根值)
//例如:需要求出4的平方根(初始猜测为1
//猜测1,商4/1=4,平均值(1+4)/2=2.5(这里需要做误差比较,符合误差比较或者为猜测值就返回)
//猜测为2.5,商4/2.5=1.6,平均值为(2.5+1.6)/2=2.05
//猜测为2.05,商4/2.05=

//主要迭代
(define (sqrt-iter guess x)
  (if (good-enough? guess x)
      guess
      (sqrt-iter (improve guess x)
                 x
      )
  )
)
//提升猜测精度
(define (improve guess x)
  (average guess (/ x guess) )
)
//求平均值
(define (average x y)
  (/ (+ x y) 2)
)
//误差设定(”足够好“的定义)
(defeine (good-enough? guess x)
  (< (abs (- (square guess) x)) 0.001)
)
//初始猜测设为1(实际设为x/2更好,不过不影响)
(define (sqrt x)
  (sqrt-iter 1.0 x)
)