djh*_*987 3 scheme continuations static racket
在C中,您可以在方法中拥有一个静态变量,该变量可以记住先前调用该方法所设置的值.我听说在Scheme中使用continuation可以找到相同的效果.任何人都可以告诉我如何在不使用变异的情况下为Scheme中的函数创建静态变量的类似效果?
你不需要延续.这是一个经典的例子:
(define counter
(let ([n 0])
(lambda ()
(set! n (add1 n))
n)))
(list (counter) (counter) (counter))
Run Code Online (Sandbox Code Playgroud)
这里有一个明显的概括,使它更有趣:
(define (make-counter n)
(lambda ()
(set! n (add1 n))
n))
(define a (make-counter 0))
(define b (make-counter 10))
(list (a) (a) (a) (b) (b) (a) (a))
Run Code Online (Sandbox Code Playgroud)
这是翻译成JS的第一段代码:
var counter = (function() {
var n = 0;
return (function() {
n++;
return n;
});
})();
Run Code Online (Sandbox Code Playgroud)