Scheme 拉姆达?这是怎么一回事?

Scheme 拉姆达?这是怎么一回事?,scheme,racket,mit-scheme,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) (定义(x)100)与: (定义x;定义名为x的变量 (lambda();作为具有零参数的异常函数 100)) ; 返回100 x;==>#(评估的lambda对象的某些表示形式,没有标准方式) (

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

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

(定义x;定义名为x的变量
(lambda();作为具有零参数的异常函数
100))    ; 返回100
x;==>#(评估的lambda对象的某些表示形式,没有标准方式)
(x) ;==>100(调用函数的结果)
您可能更熟悉Algol语言,因此在JavaScript中也是如此:

函数x(){return 100;}
与:

var x=//定义名为x的变量
函数(){//作为具有零参数的匿名函数
return 100;//返回100
};
x、 //=>函数(){return 100;}(打印其源代码)
x();//=>100(调用函数的结果)
初学者有时会在变量周围添加括号,如
((x))
,这相当于用Algol语言编写
x()()
。因此,
x
必须是一个零参数函数,它将返回一个零参数函数才能工作

(定义(x)100)
与:

(定义x;定义名为x的变量
(lambda();作为具有零参数的异常函数
100))    ; 返回100
x;==>#(评估的lambda对象的某些表示形式,没有标准方式)
(x) ;==>100(调用函数的结果)
您可能更熟悉Algol语言,因此在JavaScript中也是如此:

函数x(){return 100;}
与:

var x=//定义名为x的变量
函数(){//作为具有零参数的匿名函数
return 100;//返回100
};
x、 //=>函数(){return 100;}(打印其源代码)
x();//=>100(调用函数的结果)
初学者有时会在变量周围添加括号,如
((x))
,这相当于用Algol语言编写
x()()
。因此,
x
必须是一个零参数函数,它将返回一个零参数函数才能工作

(define(x)100)
相当于
(define x(lambda()100))
。 第一种语法实际上是第二种语法的一种语法糖。两者都定义了一个过程

使用
x
时,方案解释器将返回
x
本身。在本例中,
x
是一个lambda表达式。 当您使用
(x)
时,您正在调用一个名为
x
的过程。scheme解释器将应用
x
中的内容,在本例中为lambda表达式,并返回返回值

使用lambda,考虑lambda表达式作为运算符。 所以

((lambda())
或者,如果为变量定义lambda表达式,请将该变量作为运算符,例如

(define x
    (lambda () 100))
(x)
(define(x)100)
相当于
(define x(lambda()100))
。 第一种语法实际上是第二种语法的一种语法糖。两者都定义了一个过程

使用
x
时,方案解释器将返回
x
本身。在本例中,
x
是一个lambda表达式。 当您使用
(x)
时,您正在调用一个名为
x
的过程。scheme解释器将应用
x
中的内容,在本例中为lambda表达式,并返回返回值

使用lambda,考虑lambda表达式作为运算符。 所以

((lambda())
或者,如果为变量定义lambda表达式,请将该变量作为运算符,例如

(define x
    (lambda () 100))
(x)