The difference is that many languages have constructs that weren't value producing. It is why some have the ternary operator, but lisp just had if statements.
So, to that end, most loops do produce a value. And there are several common ways they do it. In many languages, you have to give the details of how they work. In some, you can only those details and the building if the output is a bit more declarative.