Hi, Mark,
The dolist iterates the list one element at a time. Because you're not printing in that loop, the interpreter is silently throwing away each internal result. Finally the result of the whole loop (its final evaluation) is shown by the interpreter, which is (() 5), as you would expect.
For your stated goal of (() 1 2 3 4 5) you could merely do (cons bar foo)
-- bairui