2017-04-05 3 views
0

Qu'est-ce que c'est dans le schéma? Comment pouvons-nous l'utiliser?Schéma Lambda? Qu'Est-ce que c'est?

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

Répondre

4

(define (x) 100) est le même que:

function x() { return 100; } est le même que::

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

Vous pourriez être plus la même en JavaScript aux langues Algol est donc ici

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) 

Les débutants ajoutent parfois des parenthèses autour de variables comme ((x)) et cela équivaut à écrire x()() en langues Algol. Ainsi, x doit être une fonction de zéro arguments qui retournera une fonction de zéro arguments pour fonctionner.

0

(define (x) 100) est équivalent à (define x (lambda() 100)). La première syntaxe est en fait un sucre syntaxique de la seconde. Les deux définissent une procédure.

Lorsque vous utilisez x, l'interpréteur Scheme vous renvoie x lui-même. Dans ce cas, x est une expression lambda. Lorsque vous utilisez (x), vous appelez une procédure appelée x. L'interpréteur de schéma va appliquer ce qui est à l'intérieur , dans ce cas, une expression lambda, et vous renvoyer la valeur de retour.

Pour utiliser lambda, envisager l'expression de lambda en tant qu'opérateur. Alors ((lambda (<arg-list>) <body>) <parameter-list>) Ou, si vous définissez une expression lambda à une variable, avec la variable que l'opérateur, par exemple, comme ce que vous faites,

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