我写了以下简单的方案,只是为了查看方案是在做动态还是静态绑定。
现在,我期望第17行(myFunc 5 6)
对56
进行评估(因为我知道方案具有静态分割)。但是,当我执行代码时,我得到的就是6
(没有5
),这是没有道理的!
任何人都可以告诉我是什么使它仅打印6
?
2(define myFunc
3 (lambda (a b)
4 (define aref
5 (lambda ()
6 a))
7 (define bref
8 (lambda ()
9 b))
10 (define innerFunc
11 (lambda (a b)
12 (aref)
13 (bref)))
14
15 (innerFunc 1 2)))
16
17(myFunc 5 6)
lambda
的主体隐含在 begin
表单内。begin
返回最后一个表达式的值。因此:
((lambda () 1 2 3))
将评估与此相同的值:
(begin 1 2 3)
...这是数字3
。现在,如果您需要同时返回两个或多个值,请尝试此尝试(在球拍中工作):
(values 1 2 3)
=> 1
2
3