我知道gensym可以生成符号,但似乎有一个基数的全局计数器,它可能非常大,例如,(define s (gensym 's))
s最终可能会s12345
。
我想知道是否有办法重置计数器,生成的数字可能很小?如s14
?
答案 0 :(得分:9)
没有办法做到这一点,否则会在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)))))))