[CM] need macro help!
Elijah Stone
elronnd at elronnd.net
Wed Sep 8 13:16:40 PDT 2021
On Wed, 8 Sep 2021, Iain Duncan wrote:
> (define (s4m-process-sexp sexp)
It is entirely a point of style, but I think I would rather make a
'deepmap' helper function. Untested, but something like:
(define (deepmap f x)
(if (not (list? x))
(f x)
(cons (deepmap f (car x))
(deepmap f (cdr x)))))
This also has the convenient side effect of allowing you to e.g. avoid the
contents of quotes.
> I also noticed I could thus dispense with the oneline macro all together now by doing:
>
> (define (s4m-run-expr sexp-str)
> (let ((input-sexp (string->sexp sexp-str)))
> (eval '(eval (s4m-process-sexp input-sexp)))))
The problem with this is that, since the eval runs in the s4m-run-expr's
environment, you lose the lexical scope of the caller. It would be nice
to be able to say (let ((x 5)) (s4m-run-expr "something with x"))
I think you can evaluate things in the calling environment with a bacro,
but that's hardly simpler than a regular macro.
> (define-macro (s4m-run-sexp-macro sexp)
> `(eval (s4m-process-sexp ,sexp)))
Can just be:
(define-macro (s4m-run-sexp-macro sexp)
(s4m-process-sexp sexp))
-E
More information about the Cmdist
mailing list