I need to implement my_let* using defmacro which works similarly to let*, but while let* is expanded to a series of nested let calls (behind the scenes), my_let* needs to be expanded to a single let call, and use the define statement to define the arguments i get.
an example of using my_let*:
(my_let* ((a 2)
(b 3)
(c (+ a b)))
(+ a b c))
and the return value of this code should be 10. just as if it was use let*. the code above will be expanded in my_let* to the following:
(let ()
(define a 2)
(define b 3)
(define c (+ a b))
(+ a b c))
I'm new to using macro, though i successfully written some macros, this one got me lost.
Thank you in advance.
defmacro, which Racket does have for compatibility reasons, instead of the (much easier)define-syntax,syntax-rules, and similar? Also, the expansion that you suggest isn't really the same aslet*becauselet*allows you to shadow previous bindings whereasdefinedoes not. Are you ok with that? - Brendan Cannell