2017-04-05 3 views
0

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) 

Antwort

4

(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.

0

(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)