> I suppose you mean that you want to arrange syntax in a complex
> manner, then evaluate it and you are concerned about the cost of
> rearranging every time the function/macro is called. Suppose also that
> this rearranging can be done as soon as you know the code inside the
> macro form, in CL language after definition time but before runtime.
> In this case you cannot use Alexander's suggestion of using reader
> macros at definition time. Here is a solution:
> (de defmacro "F"
> (let (@Name (car "F")
> @Fun (cdr "F")
> @Arg (pack "X")
> @Id (pack "WILL EVAL:") )
> (de @Name @Arg
> (unless (== (car @Arg) @Id)
> (con @Arg (apply '@Fun @Arg))
> (set @Arg @Id) )
> (eval (cdr @Arg)) ) ) ) )
Nice! Very clever! :)
Minor: I would suggest to use 'name' instead of 'pack' to produce the
unique transient symbol, as it is cheaper and probably more clear.