fand ich, dass das Programm zu überprüfen, ob die Scoping-lexikalische oder dynamisch ist derjenige unten angegeben (Quelle: http://inst.eecs.berkeley.edu/~cs61a/su10/resources/sp11-Jordy/scope/)Programm überprüfen, ob die Scoping-lexikalische oder dynamisch ist
(define test
(let ((scope 'lexical))
(lambda() scope)))
(let ((scope 'dynamic))
(test))
Aber wie kann das funktionieren? Dies sollte immer lexikalisch gedruckt werden (unabhängig davon, ob der Bereich lexikalisch oder dynamisch ist) oder? Da im lokalen Bereich des Körpers der erste 'let', ist Umfang immer definiert als 'lexikalisch .. Bitte korrigieren Sie mich, wenn ich falsch bin
Ich habe die Programme in der Link und das Stack-Konzept hier erklärt. Vielen Dank für die Info. Aber wenn die Testfunktion vom zweiten 'let' aufgerufen wird, wird der Code innerhalb des define-Blocks ausgeführt und der let-Block innerhalb der Testfunktion sollte den lexikalischen Wert erneut auf den Stapel schieben, bevor der Lambda-Block ausgeführt wird, oder? .. oder was ist das Problem in meinem Verständnis der Ausführung? –
@SubinP Die 'define' wird nicht ausgeführt, wenn Sie die Funktion aufrufen, die Funktion ist bereits definiert als' (lambda() scope) '. – molbdnilo
Danke, es ist jetzt klar –