for items in range [] ([]) loop

Thank you! I never noticed that.

You know, that to get the expected results it should be called this way.

for items in range  block script pic (1)

An empty slot is a placeholder for the "item" value.

The upvar version
for items in range  block script pic (5)
can be used this way
for items in range  block script pic (6)

what's the use of the range reporters? they're just the numbers from () to () reporter

In Snap! we use an empty input slot to mean "this is where to plug in the value," where "the value" depends on the context. For example:

This makes a list of 7+3, 8+3, and 1+3. Each item of the input list is plugged into the empty slot in the + block.

Although the example uses MAP, the underlying empty-slot feature is provided by the CALL and RUN blocks. Here's a definition of MAP:

Click the right arrowhead on the CALL block to get the WITH INPUTS part.

You can have more than one input to the CALL block, in which case there should be more than one empty slot in the function you're calling, as in the COMBINE block.

I am happy with its current look.

I see.

Yes, I know. I just wanted to have a custom loop ready for use.