Right. Usually I'm happy to trade speed for increased flexibility, but expanding macros at runtime doesn't seem to let you do all that much more. If anything it seems conceptually cleaner to think of macros as being expanded away at the time a function is evaluated.
That sort of works but still requires manual selection. Regardless there are many more reasons to work in Emacs when using lisp so I'll stick with it. (e.g. inferior-lisp-mode, send files or defs to a running lisp as you edit them)
It's not really a bug as much as an artifact of the REPL. You are seeing what the call to (link ...) prints and then the return value of the same call printed right after it by the REPL.
Changing the return value illustrates the point:
arc> (no (link "A Link" "somepage.html"))
<a href="somepage.html">A Link</a>nil
It might not be optimal that link (or really tag) always returns "</", but I'm not sure it matters.
Neat, thanks. (Not quite "right" since I can change &foo=myinput on page 2, but I'm guessing that could easily be fixed with an extra closure somewhere).