spec: gensym + symbol interning — *gensym-counter*, string->symbol, symbol->string, intern
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4754,3 +4754,25 @@
|
||||
(fn
|
||||
(val)
|
||||
(if (thunk? val) (eval-expr (thunk-expr val) (thunk-env val)) val)))
|
||||
|
||||
;; Phase 12: gensym + symbol interning
|
||||
|
||||
(define *gensym-counter* 0)
|
||||
|
||||
(define
|
||||
gensym
|
||||
(fn
|
||||
(&rest args)
|
||||
(let
|
||||
((prefix (if (empty? args) "g" (str (first args)))))
|
||||
(do
|
||||
(set! *gensym-counter* (+ *gensym-counter* 1))
|
||||
(make-symbol (str prefix *gensym-counter*))))))
|
||||
|
||||
(define string->symbol (fn (s) (make-symbol s)))
|
||||
|
||||
(define symbol->string (fn (sym) (symbol-name sym)))
|
||||
|
||||
(define intern (fn (s) (make-symbol s)))
|
||||
|
||||
(define symbol-interned? (fn (sym) true))
|
||||
|
||||
Reference in New Issue
Block a user