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)
7

let语法:

(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 协议 ,转载请注明出处!

接受数组类型 上一篇
基本语法define与cond 下一篇