在球拍中的gensym

use*_*104 0 scheme racket

我知道gensym可以生成符号,但似乎有一个基数的全局计数器,它可能非常大,例如,(define s (gensym 's))s可以最终得到s12345.我想知道是否有办法重置计数器,生成的数字可能很小?喜欢s14

Eli*_*lay 9

没有办法做到这一点,否则它会在文档中提到.您只能为新符号提供"基础".如果你真的需要一个小柜台,那么很容易弥补自己的gensym使用string->unreadable-symbol,比如:

(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)))))))
Run Code Online (Sandbox Code Playgroud)