Pour le code ci-dessous, je ne peux pas comprendre comment les liaisons (x, y, z) se produisent. S'il vous plaît vérifier le code, je vais vous expliquer mon problème plus en détail ci-dessous:Besoin d'aide pour comprendre les liaisons dans le code de schéma
(define (w x)
(lambda (y z)
(begin
(set! x (+ (* y x) z)) x)))
(define f1 (w 3))
(f1 4 2)
(f1 2 1)
La sortie est 14, 29. Ce sont des valeurs de x.
Cela signifie initialement, x = 3, y = 4, z = 2. Dans le deuxième appel, c'est-à-dire (f1 2 1), x = 14, y = 2, z = 1.
Mes doutes:
Comment la liaison se produire à d'abord, pourquoi est x = 3, y = 4, et z = 2? Si cela a à voir avec l'expression lambda dans la fonction, s'il vous plaît expliquer comment cela fonctionne .. J'ai le sentiment que c'est là que ma compréhension se décompose ..
Ensuite, pourquoi la réponse initiale de x = 14 est-elle retenue? dans le second appel, c'est-à-dire (f1 2 1)?
Merci pour la recherche dans ce :)
merci erjiang. comment est créé le 'interne' x? – Roy
bien, la réponse simple est qu'il est créé par 'lambda'. Une fois le 'lambda' exécuté, la fonction est convertie par Scheme en une fermeture interne (code + environnement) que vous ne pouvez probablement pas voir. – erjiang
cela me laisse toujours perplexe. Comment contrôlez-vous le nombre de variables créées par votre expression lambda qui sont internes? – Roy