我在简单的方案中编写了这个,只是为了看看Scheme是在进行动态绑定还是静态绑定。
现在我期待第17行(myFunc 5 6)
评估为56
(因为我知道Scheme有静态作用域)。
但是当我执行代码时,我得到的只是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)
答案 0 :(得分:2)
lambda
的正文隐含在begin
表单中。并且begin
返回最后一个表达式的值。所以这个:
((lambda () 1 2 3))
将评估为与此相同的值:
(begin 1 2 3)
......数字3
是多少。现在,如果您需要同时返回两个或更多值,请尝试此操作(适用于Racket):
(values 1 2 3)
=> 1
2
3