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)