方案/ Racket 中的静态变量?

标签 static scheme racket continuations

在 C 语言中,您可以在方法中使用静态变量,该变量可以记住该方法的先前调用所设置的值。我听说在Scheme中使用延续可以找到同样的效果。谁能告诉我如何在不使用突变的情况下为Scheme中的函数创建静态变量的类似效果?

最佳答案

您不需要为此继续。这是一个经典的例子:

(define counter
  (let ([n 0])
    (lambda ()
      (set! n (add1 n))
      n)))
(list (counter) (counter) (counter))

这里有一个明显的概括,使它更有趣:

(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))

这是翻译为 JS 的第一段代码:

var counter = (function() {
                 var n = 0;
                 return (function() {
                           n++;
                           return n;
                         });
               })();

关于方案/ Racket 中的静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8508845/

相关文章:

unit-testing - 异常的 Racket 测试

racket - 转换绘图上下文的原点

if-statement - Racket 中的 If 语句

php - "Static"PHP页面安全

c# - 如何将共享的 VB.NET 方法转换为 C#

java - 静态和非静态访问值

scheme - 关键字的别名

scheme - Racket "eval"一个数据

javascript - 获取请求时带有参数的静态资源出现 404 错误

algorithm - 如何改进这个列表算法?