You have the variable definitions of the form var init [step]
((x 0 (+1 x))
(u '() (cons x u)))
this increments x
in every iteration and builds with (cons x u)
the u
list as (5 4 3 2 1 0)
.
The end test
(> x n)
The result form
(nreverse u)
reverses the list (5 4 3 2 1 0)
to the given result.
And then you have an empty body.
You can of course modify the do loop to
(do ((x 0 (+1 x))
(u '()))
((> x n) (nreverse u))
(setq u (cons x u)))
this will give the same result.