【发布时间】:2011-04-08 17:53:36
【问题描述】:
我知道 gensym 可以生成符号,但似乎有一个带基数的全局计数器,它可能非常大,例如 (define s (gensym 's)) s 可以以 s12345 结尾。
我想知道是否有办法重置计数器,生成的数字可能很小?比如s14?
【问题讨论】:
我知道 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)))))))
【讨论】: