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:
2026-05-01 10:28:18 +00:00
parent 130d4d7c18
commit edf4e525f8
4 changed files with 55 additions and 2 deletions

View File

@@ -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))