为什么只能评估Lambda块中的最后一个Expr



我写了以下简单的方案,只是为了查看方案是在做动态还是静态绑定。

现在,我期望第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

相关内容

最新更新