gensym and hygienic macro

For the Compleat Fan
Locked
starseed
Posts: 38
Joined: Thu Jul 27, 2006 8:45 pm

gensym and hygienic macro

Post by starseed »

OK, while I was thinking, and learning newLisp, and tried to implement a gensym a gensym. It does not technically give you an unlimited number of different different symbols, but it should be enough for most real world problems.

Code: Select all

(context 'gensym)
(set 'no 0)
(define (gensym:gensym) 
   "creates lots of unique symbols ... is that enough?"
   (sym (string "___" (inc 'no 0.1))))
   
(context MAIN)
And a macro to create hygienic macros, using gensym.

Code: Select all

(define-macro (def-macro)
   "creates macro definitions with automatically created symbols"
   (let ((__def-macro_def (clean (fn (x) (= ', x)) (rest (args 0))))
         (__def-macro_sym '()))
      (dolist (__def-macro_ __def-macro_def)
         (push (list __def-macro_ (gensym)) __def-macro_sym))
      (set '__def-macro_def (expand (args) __def-macro_sym))
      (push 'define-macro __def-macro_def)
      (eval __def-macro_def)
   )
)
Disclaimer: I'm a newbie when it comes to newLisp (and the whole lisp family), so take my code with a grain of salt. ;-)

Comments are highly appreciated.

Ingo

Locked