Was ist das Schema? Wie können wir es benutzen?Schema Lambda? Was ist es?
scm> (define (x) 100)
x
scm> (x)
100
scm> x ; When we "called" x, it return (lambda() 100). what is it ?
(lambda() 100)
Was ist das Schema? Wie können wir es benutzen?Schema Lambda? Was ist es?
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)
ist die gleiche wie:
(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)
Sie könnten so hier mehr um Algol Sprachen gleich sein in JavaScript ist:
function x() { return 100; }
ist die gleiche wie:
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)
Anfänger fügen manchmal Klammern um Variablen wiehinzuund es entspricht dem Schreiben x()()
in Algol Sprachen. Daher muss x
eine Funktion von Null-Argumenten sein, die eine Funktion von Null-Argumenten zurückgeben, um zu funktionieren.
(define (x) 100)
entspricht (define x (lambda() 100))
. Die erste Syntax ist eigentlich ein syntaktischer Zucker der zweiten. Beide definieren eine Prozedur.
Wenn Sie x
verwenden, gibt der Scheme-Interpreter Ihnen x
selbst zurück. In diesem Fall ist x
ein Lambda-Ausdruck. Wenn Sie (x)
verwenden, rufen Sie eine Prozedur mit dem Namen x
auf. Der Schema-Interpreter wird anwenden was ist in x
, in diesem Fall ein Lambda-Ausdruck, und geben Sie den Rückgabewert zurück.
Um Lambda zu verwenden, betrachte Lambda-Ausdruck als Operator. So ((lambda (<arg-list>) <body>) <parameter-list>)
Oder, wenn Sie einen Lambda-Ausdruck auf eine Variable definieren, nehmen Sie die Variable als Betreiber, zum Beispiel, wie das, was Sie tun,
(define x
(lambda() 100))
(x)