计划拉姆达?它是什么?
Scheme Lambda? What is it?
方案是什么?我们如何使用它?
scm> (define (x) 100)
x
scm> (x)
100
scm> x ; When we "called" x, it return (lambda () 100). what is it ?
(lambda () 100)
(define (x) 100)
等同于:
(define x ; define the variable named x
(lambda () ; as a anoymous function with zero arguments
100)) ; that returns 100
x ; ==> #<function> (some representation of the evaluated lambda object, there is no standard way)
(x) ; ==> 100 (The result of calling the function)
您可能更喜欢 Algol 语言,因此 JavaScript 中也是如此:
function x () { return 100; }
等同于:
var x = // define the variable named x
function () { // as the anonymous function with zero arguments
return 100; // that returns 100
};
x; // => function () { return 100; } (prints its source)
x(); // => 100 (the result of calling the function)
初学者有时会在变量周围添加括号,如 ((x))
,这相当于在 Algol 语言中编写 x()()
。因此 x
必须是一个零参数的函数,它将 return 一个零参数的函数才能工作。
(define (x) 100)
等同于(define x (lambda () 100))
。
第一种语法实际上是第二种语法的语法糖。两者都定义了一个过程。
当你使用 x
时,Scheme 解释器会 return 你 x
自己。在这种情况下,x
是一个 lambda 表达式。
当您使用 (x)
时,您正在调用一个名为 x
的过程。方案解释器将 应用 x
中的内容,在这种情况下,是一个 lambda 表达式,return 你 return 值。
要使用 lambda,请将 lambda 表达式视为运算符。
所以 ((lambda (<arg-list>) <body>) <parameter-list>)
或者,如果你给一个变量定义一个lambda表达式,把这个变量作为操作符,比如像你做的那样,
(define x
(lambda () 100))
(x)
方案是什么?我们如何使用它?
scm> (define (x) 100)
x
scm> (x)
100
scm> x ; When we "called" x, it return (lambda () 100). what is it ?
(lambda () 100)
(define (x) 100)
等同于:
(define x ; define the variable named x
(lambda () ; as a anoymous function with zero arguments
100)) ; that returns 100
x ; ==> #<function> (some representation of the evaluated lambda object, there is no standard way)
(x) ; ==> 100 (The result of calling the function)
您可能更喜欢 Algol 语言,因此 JavaScript 中也是如此:
function x () { return 100; }
等同于:
var x = // define the variable named x
function () { // as the anonymous function with zero arguments
return 100; // that returns 100
};
x; // => function () { return 100; } (prints its source)
x(); // => 100 (the result of calling the function)
初学者有时会在变量周围添加括号,如 ((x))
,这相当于在 Algol 语言中编写 x()()
。因此 x
必须是一个零参数的函数,它将 return 一个零参数的函数才能工作。
(define (x) 100)
等同于(define x (lambda () 100))
。
第一种语法实际上是第二种语法的语法糖。两者都定义了一个过程。
当你使用 x
时,Scheme 解释器会 return 你 x
自己。在这种情况下,x
是一个 lambda 表达式。
当您使用 (x)
时,您正在调用一个名为 x
的过程。方案解释器将 应用 x
中的内容,在这种情况下,是一个 lambda 表达式,return 你 return 值。
要使用 lambda,请将 lambda 表达式视为运算符。
所以 ((lambda (<arg-list>) <body>) <parameter-list>)
或者,如果你给一个变量定义一个lambda表达式,把这个变量作为操作符,比如像你做的那样,
(define x
(lambda () 100))
(x)