How does that relate to a simple loop construct though? Why would you want that to be mind bending in interface or implementation? Every other language makes it as simple as possible.
Common Lisp happens to be on the upper end of what loop allows – you can use it as a standard for loop pretty easily, but the interface gives you many other options.
If you really wanna get freaky try 'do. It is the heroin addicted cousin of 'loop
https://www.lispworks.com/documentation/HyperSpec/Body/m_do_...
'do is much more general and way more powerful. in some sense 'loop is the taming of 'do. see for example
https://www.lispworks.com/documentation/lcl50/loop/loop-7.ht...
Example:
CL-USER 18 > (do ((a 1 (+ a 1))
(b 10 (* b 1.5))
(c nil))
((> a 5) (list a b (reverse c)))
(push (* a b) c))
(6 75.9375 (10 30.0 67.5 135.0 253.125))
CL-USER 19 > (loop for a = 1 then (+ a 1)
and b = 10 then (* b 1.5)
and c = NIL then c
when (> a 5) do (return (list a b (reverse c)))
do (push (* a b) c))
(6 75.9375 (10 30.0 67.5 135.0 253.125))I also find DO not easy to read and understand.
The code from above I would actually write in LOOP as
(loop for a from 1 upto 5
and b = 10 then (* b 1.5)
collect (* a b) into c
finally (return (list a b c)))
I find that to be readable.