计划Lambda?它是什么?

时间:2017-04-05 17:04:02

标签: scheme racket mit-scheme

计划中是什么?我们如何使用它?

scm> (define (x) 100)
x
scm> (x)
100
scm> x ; When we "called" x, it return (lambda () 100). what is it ?
(lambda () 100)

2 个答案:

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