2 votes

Réécrire une expression en utilisant let

J'ai enseigné la langue schématique et dans mon manuel, je suis tombé sur l'expression ci-dessous. Ma question est de savoir pourquoi elle est évaluée sur le nombre '10' ? Quelqu'un peut-il me l'expliquer ? Je veux dire quel environnement local est créé et quelles liaisons sont créées avec les symboles. Je sais aussi que chaque expression lambda peut être réécrite en utilisant let . Avez-vous une idée de la façon de procéder ? J'apprécierais toute aide.

(let ((x 10)) 
  (define y (lambda (x) x)) 
  (define x 5) 
  (+ x (y x)))

5voto

Sylwester Points 7142

Votre code sous une forme plus lisible :

(let ((x 10))
  (define y (lambda (x) x))
  (define x 5)
  (+ x (y x)))

Vous pouvez appliquer la méthode de substitution :

(+ x (y x)) ; ==>
(+ 5 (y 5)) ; ==>
(+ 5 ((lambda (x) x) 5)) ; ==>
(+ 5 5) ; ==>
10

Vous l'avez mal compris. Chaque let peut être réécrit comme un lambda qui est immédiatement appelé :

(let ((a aexpr) (b bexpr))
  body ...)

; ==

((lambda (a b) body ...) aexpr bexpr)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X