当我每次得到值 10 时评估以下表达式。
(((lambda (x) (lambda () (set! x (+ x 10)) x)) 0))
不过,我只是通过用名称抽象上述过程来进行修改,并在每次值增加 10 时调用 foo!
(define foo ((lambda (x) (lambda () (set! x (+ x 10)) x)) 0))
有人可以解释一下吗?
您所调用的函数是一个计数器,每次调用时都会返回比原来大 10 的数字。
在第一种情况下,每次都会创建一个新函数,然后立即调用它一次,然后丢弃该函数。因此,每次您都是第一次调用该计数器的新实例,因此它应该返回 10。
在第二种情况下,您创建一次函数并将其分配给一个变量并重复调用同一函数。由于您正在调用相同的函数,因此它应该返回 10, 20, ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)