I think you want
quote
@M($i,$j, $ε1, ....)
end
in order for your L macro to return an expression (that in turn calls the M
macro).
Macros are not functions. When you call @M(i,j,...), it doesn't pass the
*value* of the arguments i,j, etcetera, it passes the symbolic expressions
:i, :j, and so on.
Of course, if you are only calling M from inside another macro, it is
perfectly valid to just change M from a macro to an ordinary function
(returning an expression) ... just change "macro" to "function" in the
definition of M, and call it without the "@" inside L.