scheme - Racket 中的gensym

我知道 gensym 可以生成符号,但似乎有一个全局计数器,它可以非常大,例如 (define s (gensym 's)) s 可以以 s12345 结尾。 我想知道是否有一种方法可以重置计数器,生成的数字可以很小?比如 s14

最佳答案

没有办法做到这一点,否则它会在 docs 中提到.您只能为新符号提供一个“基础”。如果你真的需要一个小计数器,那么很容易使用 string->unreadable-symbol 组成你自己的 gensym ,例如:

(define gensym
  (let ([counter 0])
    (lambda ([x 'g])
      (if (number? x)
        (set! counter x)
        (begin0 (string->unreadable-symbol
                 (format "~a~a" x counter))
          (set! counter (add1 counter)))))))

关于scheme - Racket 中的gensym,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5590073/

相关文章:

.net - Base64 编码替代下划线

cuda - OpenCL (Cuda) 中的逐元素运算

.net - 如何在 Visual Studio 2010 的解决方案资源管理器中突出显示当前打开的

asp.net - 在 asp 的 gridview 中使用 eval 获取 this 对象

php - 使用正则表达式阻止某些电子邮件提供商

mongodb - 我可以在 MongoDB 中存储关系数据库结构吗

haskell - 将 Haskell IO 列表转换为列表类型

math - 两次旋转之间的误差?

c - 如何在 Linux 中找到不同的内存段起始位置及其大小

PHP - 将 time() 调整为可被 5 整除