方案分配

Shu*_*ham 4 scheme

每当我得到值10时,我评估以下表达式.

(((lambda (x) (lambda () (set! x (+ x 10)) x)) 0)) 
Run Code Online (Sandbox Code Playgroud)

但是我只是通过使用名称抽象上述过程来修改,并在每次值增加10时调用foo !!

(define foo ((lambda (x) (lambda () (set! x (+ x 10)) x)) 0))
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

new*_*cct 5

您调用的函数是一个计数器,每次调用它时返回10.

在第一种情况下,每次都要创建一个新函数,然后立即调用它,然后丢弃该函数.所以每次,你第一次调用这个计数器的新实例,所以它应该返回10.

在第二种情况下,您创建一次函数并将其分配给变量并重复调用该函数.由于你正在调用相同的函数,它应该返回10,20,......