2011-04-08 3 views
0

나는 gensym이 심볼을 생성 할 수 있다는 것을 알고 있지만, 매우 큰베이스가있는 글로벌 카운터가있는 것 같습니다. 예를 들어, (define s (gensym 's))s12345으로 끝날 수 있습니다. 숫자가 작을 수있는 카운터를 재설정하는 방법이 있는지 궁금합니다 (s14과 같은)?gensym 라켓에

답변

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))))))) 
+0

NICE는 ... 그건 도움이 작은 도구입니다! –