我知道 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/