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