Генсим в Ракетке - PullRequest
       3

Генсим в Ракетке

0 голосов
/ 08 апреля 2011

Я знаю, что gensym может генерировать символы, но кажется, что там есть глобальный счетчик с основанием, который может быть очень большим, например, (define s (gensym 's)) s может заканчиваться на s12345.Мне интересно, есть ли способ обнулить счетчик, где сгенерированное число может быть маленьким? Как s14?

1 Ответ

9 голосов
/ 08 апреля 2011

Нет способа сделать это, иначе это было бы упомянуто в документах . Вы можете предоставить только «базу» для нового символа. Если вам действительно нужен маленький счетчик, то легко создать свой собственный 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)))))))
...