【问题标题】:gensym in Racket球拍中的 gensym
【发布时间】:2011-04-08 17:53:36
【问题描述】:

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

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    没有办法做到这一点,否则会在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)))))))
    

    【讨论】:

    • NICE...这是一个有用的小工具!!
    • 它的应用是什么?
    猜你喜欢
    • 2012-10-14
    • 2021-02-07
    • 2021-12-21
    • 1970-01-01
    • 2020-04-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多