lambda
例:
> ((lambda (x) (- x 1)) 3)
2创建局部变量
例:
> (define (fun x)
((lambda (a) (+ x a)) (+ x 1)))
> (fun 1)
3
> (fun 2)
5也可以用let简化
> (define (fun x)
(let ((a (+ x 1))
)
(+ x a)))
> (fun 1)
3
> (fun 2)
5
> (fun 3)
7let语法:
(let (
(变量名1 怎么来的)
(变量名2 怎么来的)
)
(body)
)lambda与let
((lambda (x)
(body))
x怎么来的)
------------------------------------
(let ((x x怎么来的))
(body))> (let ((x 1)
(y 2))
(+ x y))
3> ((lambda (x y)
(+ x y))
1
2)
3这样的话scheme就可以不用增加新的机制来支持let
let 与 lambda都有局部变量的意思,
let与lambda体,里面的x 都是 外面x加一后的x
而外层的x就是(fun x) 传来的x
两个x不是一个东西
> (define (fun x)
(+ ((lambda (x)
(+ x 1)) (+ x 1))
x))
> (fun 1)
4
> (fun 2)
6
> (define (fun x)
(+ (let ((x (+ x 1)))
(+ x 1))
x))
> (fun 1)
4
> (fun 2)
6例:
找函数y= 2x+5 的零点
> (define (f fun x1 x2)
(let ((a (fun x1))
(b (fun x2))
(x (/ (+ x1 x2) 2.0)))
(if (< (- x2 x1) 0.000000000001)
x
(let ((c (fun x)))
(if (< (* a c) 0)
(f fun x1 x)
(f fun x x2))))))
> (f (lambda (x) (+ x 2)) -40 40)
-2.0000000000001705
> (f (lambda (x) (- (* x x) 2)) -40 40)
-1.4142135623731633
> (f (lambda (x) (- (* 2 x) 9)) -40 40)
4.5000000000001705本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!