计划中是什么?我们如何使用它?
scm> (define (x) 100)
x
scm> (x)
100
scm> x ; When we "called" x, it return (lambda () 100). what is it ?
(lambda () 100)
答案 0 :(得分:4)
(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
必须是零参数的函数,它将返回零参数的函数以便工作。
答案 1 :(得分:0)
(define (x) 100)
相当于(define x (lambda () 100))
。
第一种语法实际上是第二种句法的糖。两者都定义了一个过程。
使用x
时,Scheme解释器会自动返回x
。在这种情况下,x
是lambda表达式。
使用(x)
时,您正在调用名为x
的过程。方案解释器将应用 x
内的内容,在本例中为lambda表达式,并返回返回值。
要使用lambda,请将lambda表达式视为运算符。
所以((lambda (<arg-list>) <body>) <parameter-list>)
或者,如果您将lambda表达式定义为变量,请将变量作为运算符,例如,如您所做的那样,
(define x
(lambda () 100))
(x)