This doesn't work in Lispworks. It boils down to Lispworks signaling an error when you try to loop over something that is not a list. In this case a symbol, i.e.:
(loop for (car . cdr) on form ...) when form is a symbol will simply loop over no items in SBCL, CLISP, etc, but will signal an error in Lispworks.
I'm not sure which implementation is correct, but I think Lispworks' behaviour is slightly less surprising.
I've attached a (hopefully correct) patch. It doesn't seem to break SBCL or CLISP, but I haven't tested with any other implementations.