Loops/Downward for: Difference between revisions

From Rosetta Code
Content added Content deleted
(add Zig example)
m (→‎{{header|ALGOL-M}}: added workaround)
 
(37 intermediate revisions by 18 users not shown)
Line 25: Line 25:


=={{header|11l}}==
=={{header|11l}}==
<lang 11l>L(i) (10..0).step(-1)
<syntaxhighlight lang="11l">L(i) (10..0).step(-1)
print(i)</lang>
print(i)</syntaxhighlight>


=={{header|360 Assembly}}==
=={{header|360 Assembly}}==
Use of BXLE and BCT opcodes.
Use of BXLE and BCT opcodes.
<lang 360asm>* Loops/Downward for 27/07/2015
<syntaxhighlight lang="360asm">* Loops/Downward for 27/07/2015
LOOPDOWN CSECT
LOOPDOWN CSECT
USING LOOPDOWN,R12
USING LOOPDOWN,R12
Line 55: Line 55:
BUFFER DC CL80' '
BUFFER DC CL80' '
YREGS
YREGS
END LOOPDOWN</lang>
END LOOPDOWN</syntaxhighlight>


=={{header|6502 Assembly}}==
=={{header|6502 Assembly}}==
Code is called as a subroutine (i.e. JSR Start).
Code is called as a subroutine (i.e. JSR Start).
Printing routines are only partially coded here, specific OS/hardware routines for printing are left unimplemented.
Printing routines are only partially coded here, specific OS/hardware routines for printing are left unimplemented.
<lang 6502asm>;An OS/hardware specific routine that is setup to display the Ascii character
<syntaxhighlight lang="6502asm">;An OS/hardware specific routine that is setup to display the Ascii character
;value contained in the Accumulator
;value contained in the Accumulator
Send = $9000 ;routine not implemented here
Send = $9000 ;routine not implemented here
Line 97: Line 97:
ORA #$30
ORA #$30
JSR Send ;routine not implemented here
JSR Send ;routine not implemented here
RTS </lang>
RTS </syntaxhighlight>


=={{header|68000 Assembly}}==
=={{header|68000 Assembly}}==
Code is called as a subroutine, i.e. "JSR ForLoop." OS/Hardware specific printing subroutines are unimplemented here.
Code is called as a subroutine, i.e. "JSR ForLoop." OS/Hardware specific printing subroutines are unimplemented here.
<lang 68000devpac>ForLoop:
<syntaxhighlight lang="68000devpac">ForLoop:
MOVE.W #10,D0
MOVE.W #10,D0
loop:
loop:
JSR Print_D0_As_Ascii ;some routine that converts the digits of D0 into ascii characters and prints them to screen.
JSR Print_D0_As_Ascii ;some routine that converts the digits of D0 into ascii characters and prints them to screen.
DBRA D0,loop ;repeat until D0.W = $FFFF
DBRA D0,loop ;repeat until D0.W = $FFFF
rts</lang>
rts</syntaxhighlight>

=={{header|8080 Assembly}}==
This assumes the CP/M operating system.
<syntaxhighlight lang="asm">
;-------------------------------------------------------
; some useful equates
;-------------------------------------------------------
bdos equ 5h ; location ofjump to BDOS entry point
wboot equ 0 ; BDOS warm boot function
conout equ 2 ; write character to console
;-------------------------------------------------------
; main code
;-------------------------------------------------------
org 100h
lxi sp,stack ; set up a stack
;
lxi h,10 ; starting value for countdown
loop: call putdec ; print it
mvi a,' ' ; space between numbers
call putchr
dcx h ; decrease count by 1
mov a,h ; are we done (HL = 0)?
ora l
jnz loop ; no, so continue with next number
jmp wboot ; otherwise exit to operating system
;-------------------------------------------------------
; console output of char in A register
; preserves BC, DE, HL
;-------------------------------------------------------
putchr: push h
push d
push b
mov e,a
mvi c,conout
call bdos
pop b
pop d
pop h
ret
;---------------------------------------------------------
; Decimal output to console routine
; HL holds 16-bit unsigned binary number to print
; Preserves BC, DE, HL
;---------------------------------------------------------
putdec: push b
push d
push h
lxi b,-10
lxi d,-1
putdec2:
dad b
inx d
jc putdec2
lxi b,10
dad b
xchg
mov a,h
ora l
cnz putdec ; recursive call!
mov a,e
adi '0' ; make printable
call putchr
pop h
pop d
pop b
ret
;----------------------------------------------------------
; data area
;----------------------------------------------------------
stack equ $+128 ; 64-level stack to support recursion
;
end
</syntaxhighlight>
{{out}}
<pre>
10 9 8 7 6 5 4 3 2 1
</pre>



=={{header|8086 Assembly}}==
=={{header|8086 Assembly}}==
It is typically much easier for assembly languages to loop downwards than forwards, as they can do so without using a redundant equality check. The 8086's <code>LOOP</code> instruction will loop a section of code, using the <code>CX</code> register as the loop counter.
It is typically much easier for assembly languages to loop downwards than forwards, as they can do so without using a redundant equality check. The 8086's <code>LOOP</code> instruction will loop a section of code, using the <code>CX</code> register as the loop counter.


<lang asm> .model small ;.exe file, max 128 KB
<syntaxhighlight lang="asm"> .model small ;.exe file, max 128 KB
.stack 1024 ;reserve 1 KB for the stack pointer.
.stack 1024 ;reserve 1 KB for the stack pointer.
Line 169: Line 247:
ret
ret


end start ;EOF</lang>
end start ;EOF</syntaxhighlight>


=={{header|AArch64 Assembly}}==
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program loopdownward64.s */
/* program loopdownward64.s */
Line 224: Line 302:
/* for this file see task include a file in language AArch64 assembly */
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
.include "../includeARM64.inc"
</syntaxhighlight>
</lang>
=={{header|Ada}}==
=={{header|Ada}}==
<lang ada>for I in reverse 0..10 loop
<syntaxhighlight lang="ada">for I in reverse 0..10 loop
Put_Line(Integer'Image(I));
Put_Line(Integer'Image(I));
end loop;</lang>
end loop;</syntaxhighlight>


=={{header|Agena}}==
=={{header|Agena}}==
Tested with Agena 2.9.5 Win32
Tested with Agena 2.9.5 Win32
<lang agena>for i from 10 downto 0 do
<syntaxhighlight lang="agena">for i from 10 downto 0 do
print( i )
print( i )
od</lang>
od</syntaxhighlight>


=={{header|ALGOL 60}}==
=={{header|ALGOL 60}}==
{{works with|A60}}
'''Based on the 1962 Revised Repport on ALGOL''':
'''Based on the 1962 Revised Report on ALGOL''':
'''begin'''
'''begin'''
'''integer''' i;
'''integer''' i;
'''for''' i:=10 '''step''' -1 '''until''' 0 '''do'''
'''for''' i:=10 '''step''' -1 '''until''' 0 '''do'''
outinteger(i)
outinteger(1,i)
'''end'''
'''end'''
{{works with|ALGOL 60|OS/360}}
{{works with|ALGOL 60|OS/360}}
<lang algol60>'BEGIN' 'COMMENT' Loops/Downward for - Algol60 - 23/06/2018;
<syntaxhighlight lang="algol60">'BEGIN' 'COMMENT' Loops/Downward for - Algol60 - 23/06/2018;
'INTEGER' I;
'INTEGER' I;
'FOR' I := 10 'STEP' -1 'UNTIL' 0 'DO'
'FOR' I := 10 'STEP' -1 'UNTIL' 0 'DO'
OUTINTEGER(1,I)
OUTINTEGER(1,I)
'END'</lang>
'END'</syntaxhighlight>


=={{header|ALGOL 68}}==
=={{header|ALGOL 68}}==
Line 254: Line 333:
{{works with|ALGOL 68G|Any - tested with release mk15-0.8b.fc9.i386}}
{{works with|ALGOL 68G|Any - tested with release mk15-0.8b.fc9.i386}}
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386}}
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386}}
<lang algol68>FOR i FROM 10 BY -1 TO 0 DO
<syntaxhighlight lang="algol68">FOR i FROM 10 BY -1 TO 0 DO
print((i,new line))
print((i,new line))
OD</lang>
OD</syntaxhighlight>
As a common extension the DOWNTO is sometimes included to optimise
As a common extension the DOWNTO is sometimes included to optimise
the loop termination logic. The DOWNTO is available in Marcel's
the loop termination logic. The DOWNTO is available in Marcel's
[[ALGOL 68G]] and [[Cambridge ALGOL 68C]].
[[ALGOL 68G]] and [[Cambridge ALGOL 68C]].
<lang algol68>FOR i FROM 10 DOWNTO 0 DO
<syntaxhighlight lang="algol68">FOR i FROM 10 DOWNTO 0 DO
print((i,new line))
print((i,new line))
OD</lang>
OD</syntaxhighlight>

=={{header|ALGOL-M}}==
Sadly, ALGOL-M's FOR statement does not allow a negative value
for STEP, so in order to count down we either have to use a WHILE loop
or move the subtraction into the body of the FOR loop
<syntaxhighlight lang="ALGOL">
begin

integer i;

write("First approach :");
i := 10;
while (i >= 0) do
begin
writeon(i);
i := i - 1;
end;

write("Second approach:");
for i := 0 step 1 until 10 do
writeon(10-i);

end
</syntaxhighlight>
{{out}}
<pre>
First approach : 10 9 8 7 6 5 4 3 2 1 0
Second approach: 10 9 8 7 6 5 4 3 2 1 0
</pre>


=={{header|ALGOL W}}==
=={{header|ALGOL W}}==
<lang algolw>begin
<syntaxhighlight lang="algolw">begin
for i := 10 step -1 until 0 do
for i := 10 step -1 until 0 do
begin
begin
write( i )
write( i )
end
end
end.</lang>
end.</syntaxhighlight>


=={{header|Amazing Hopper}}==
<syntaxhighlight lang="amazing hopper">
#include <flow.h>

DEF-MAIN
CLR-SCR
SET(i, 10)
LOOP(ciclo abajo)
PRNL(i)
BACK-IF-NOT-ZERO(i--, ciclo abajo)
END
</syntaxhighlight>
{{out}}
<pre>
10
9
8
7
6
5
4
3
2
1
0
</pre>
=={{header|AmigaE}}==
=={{header|AmigaE}}==
<lang amigae>PROC main()
<syntaxhighlight lang="amigae">PROC main()
DEF i
DEF i
FOR i := 10 TO 0 STEP -1
FOR i := 10 TO 0 STEP -1
WriteF('\d\n', i)
WriteF('\d\n', i)
ENDFOR
ENDFOR
ENDPROC</lang>
ENDPROC</syntaxhighlight>


=={{header|AppleScript}}==
=={{header|AppleScript}}==
<lang AppleScript>repeat with i from 10 to 0 by -1
<syntaxhighlight lang="applescript">repeat with i from 10 to 0 by -1
log i
log i
end repeat</lang>
end repeat</syntaxhighlight>


=={{header|ARM Assembly}}==
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>


/* ARM assembly Raspberry PI */
/* ARM assembly Raspberry PI */
Line 402: Line 536:




</syntaxhighlight>
</lang>


=={{header|Arturo}}==
=={{header|Arturo}}==
<lang rebol>loop 10..0 'i [
<syntaxhighlight lang="rebol">loop 10..0 'i [
print i
print i
]</lang>
]</syntaxhighlight>


{{out}}
{{out}}
Line 422: Line 556:
1
1
0</pre>
0</pre>

=={{header|Asymptote}}==
Asymptote's control structures are similar to those in C, C++, or Java
<syntaxhighlight lang="asymptote">for(int i = 10; i >=0; --i) {
write(i);
}</syntaxhighlight>


=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==
<lang AutoHotkey>x := 10
<syntaxhighlight lang="autohotkey">x := 10
While (x >= 0)
While (x >= 0)
{
{
Line 431: Line 571:
}
}
MsgBox % output
MsgBox % output
</syntaxhighlight>
</lang>


=={{header|Avail}}==
=={{header|Avail}}==
<lang Avail>For each i from 10 to 0 by -1 do [Print: “i” ++ "\n";];</lang>
<syntaxhighlight lang="avail">For each i from 10 to 0 by -1 do [Print: “i” ++ "\n";];</syntaxhighlight>
Note that <code>10 to 0 by -1</code> section isn't a fixed part of the loop syntax, but a call to the <code>_to_by_</code> method, which returns a tuple of integers in a range separated by a particular step size, in this case returning <code><10, 9, 8, 7, 6, 5, 4, 3, 2, 1></code>.
Note that <code>10 to 0 by -1</code> section isn't a fixed part of the loop syntax, but a call to the <code>_to_by_</code> method, which returns a tuple of integers in a range separated by a particular step size, in this case returning <code><10, 9, 8, 7, 6, 5, 4, 3, 2, 1></code>.


=={{header|AWK}}==
=={{header|AWK}}==
<lang awk>BEGIN {
<syntaxhighlight lang="awk">BEGIN {
for(i=10; i>=0; i--) {
for(i=10; i>=0; i--) {
print i
print i
}
}
}</lang>
}</syntaxhighlight>


=={{header|Axe}}==
=={{header|Axe}}==
Axe does not support for loops with step sizes other than 1.
Axe does not support for loops with step sizes other than 1.
<lang axe>For(I,0,10)
<syntaxhighlight lang="axe">For(I,0,10)
Disp 10-I▶Dec,i
Disp 10-I▶Dec,i
End</lang>
End</syntaxhighlight>

=={{header|Bait}}==
<syntaxhighlight lang="bait">
fun main() {
for i := 10; i >= 0; i -= 1 {
println(i)
}
}
</syntaxhighlight>


=={{header|BASIC}}==
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
==={{header|Applesoft BASIC}}===
<lang ApplesoftBasic>FOR I = 10 TO 0 STEP -1 : PRINT I : NEXT I</lang>
<syntaxhighlight lang="applesoftbasic">FOR I = 10 TO 0 STEP -1 : PRINT I : NEXT I</syntaxhighlight>


==={{header|BaCon}}===
==={{header|BaCon}}===
<lang freebasic>' Downward for
<syntaxhighlight lang="freebasic">' Downward for
FOR i = 10 DOWNTO 0 : PRINT i : NEXT</lang>
FOR i = 10 DOWNTO 0 : PRINT i : NEXT</syntaxhighlight>


==={{header|BASIC256}}===
==={{header|BASIC256}}===
{{works with|QBasic}}
{{works with|QBasic}}
<lang BASIC256>for i = 10 to 0 step -1
<syntaxhighlight lang="basic256">for i = 10 to 0 step -1
print i; " ";
print i; " ";
next i
next i
print
print
end</lang>
end</syntaxhighlight>


==={{header|BBC BASIC}}===
==={{header|BBC BASIC}}===
<lang bbcbasic> FOR i% = 10 TO 0 STEP -1
<syntaxhighlight lang="bbcbasic"> FOR i% = 10 TO 0 STEP -1
PRINT i%
PRINT i%
NEXT</lang>
NEXT</syntaxhighlight>


==={{header|Commodore BASIC}}===
==={{header|Commodore BASIC}}===
<lang basic>10 FOR I = 10 TO 0 STEP -1
<syntaxhighlight lang="basic">10 FOR I = 10 TO 0 STEP -1
20 PRINT I
20 PRINT I
30 NEXT</lang>
30 NEXT</syntaxhighlight>

==={{header|Chipmunk Basic}}===
The [[#GW-BASIC|GW-BASIC]] solution works without any changes.

==={{header|FBSL}}===
<syntaxhighlight lang="qbasic">#APPTYPE CONSOLE

FOR DIM i = 10 DOWNTO 0
PRINT i
NEXT

PAUSE</syntaxhighlight>


==={{header|FreeBASIC}}===
==={{header|FreeBASIC}}===
<lang freebasic>' FB 1.05.0 Win64
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64


For i As Integer = 10 To 0 Step -1
For i As Integer = 10 To 0 Step -1
Line 483: Line 644:
Next
Next
Print
Print
Sleep</lang>
Sleep</syntaxhighlight>
{{out}}
{{out}}
<pre> 10 9 8 7 6 5 4 3 2 1 0</pre>
<pre>
10 9 8 7 6 5 4 3 2 1 0
</pre>


==={{header|FutureBasic}}===
==={{header|FutureBasic}}===
<lang futurebasic>
<syntaxhighlight lang="futurebasic">
window 1, @"Countdown", ( 0, 0, 400, 300 )
include "ConsoleWindow"


NSInteger i
dim as long i


for i = 10 to 0 step -1
for i = 10 to 0 step -1
print i
print i
next
next

</lang>
HandleEvents</syntaxhighlight>
Output:
Output:
<pre>
<pre> 10
10
9
9
8
8
Line 511: Line 670:
2
2
1
1
0
0</pre>
</pre>


==={{header|Gambas}}===
==={{header|Gambas}}===
'''[https://gambas-playground.proko.eu/?gist=b236db5bdb1087fa90e934a5a8210e1f Click this link to run this code]'''
'''[https://gambas-playground.proko.eu/?gist=b236db5bdb1087fa90e934a5a8210e1f Click this link to run this code]'''
<lang gambas>Public Sub Main()
<syntaxhighlight lang="gambas">Public Sub Main()
Dim siCount As Short
Dim siCount As Short


Line 523: Line 681:
Next
Next


End</lang>
End</syntaxhighlight>
Output:
Output:
<pre>10 9 8 7 6 5 4 3 2 1 0</pre>
<pre>
10 9 8 7 6 5 4 3 2 1 0
</pre>


==={{header|GW-BASIC}}===
==={{header|GW-BASIC}}===
{{works with|BASICA}}
{{works with|PC-BASIC|any}}
{{works with|PC-BASIC|any}}
<syntaxhighlight lang="gwbasic">10 FOR I% = 10 TO 0 STEP -1
<lang qbasic>
10 FOR I% = 10 TO 0 STEP -1
20 PRINT I%
20 PRINT I%
30 NEXT I%
30 NEXT I%</syntaxhighlight>
</lang>


==={{header|IS-BASIC}}===
==={{header|IS-BASIC}}===
<lang IS-BASIC>100 FOR I=10 TO 0 STEP-1
<syntaxhighlight lang="is-basic">100 FOR I=10 TO 0 STEP-1
110 PRINT I
110 PRINT I
120 NEXT</lang>
120 NEXT</syntaxhighlight>


==={{header|Liberty BASIC}}===
==={{header|Liberty BASIC}}===
{{works with|Just BASIC}}
<lang lb>
{{works with|Run BASIC}}
for i = 10 to 0 step -1
<syntaxhighlight lang="lb">for i = 10 to 0 step -1
print i
print i
next i
next i
end</lang>
end</syntaxhighlight>


==={{header|Microsoft Small Basic}}===
==={{header|Microsoft Small Basic}}===
<lang microsoftsmallbasic>
<syntaxhighlight lang="microsoftsmallbasic">
For i = 10 To 0 Step -1
For i = 10 To 0 Step -1
TextWindow.WriteLine(i)
TextWindow.WriteLine(i)
EndFor</lang>
EndFor</syntaxhighlight>

==={{header|MSX Basic}}===
The [[#GW-BASIC|GW-BASIC]] solution works without any changes.


==={{header|NS-HUBASIC}}===
==={{header|NS-HUBASIC}}===
<lang NS-HUBASIC>10 FOR 1=10 TO 0 STEP -1
<syntaxhighlight lang="ns-hubasic">10 FOR 1=10 TO 0 STEP -1
20 PRINT I
20 PRINT I
30 NEXT</lang>
30 NEXT</syntaxhighlight>


==={{header|PureBasic}}===
==={{header|PureBasic}}===
<lang PureBasic>For i=10 To 0 Step -1
<syntaxhighlight lang="purebasic">For i=10 To 0 Step -1
Debug i
Debug i
Next</lang>
Next</syntaxhighlight>


==={{header|QB64}}===
==={{header|QB64}}===
''CBTJD'': 2020/03/14
''CBTJD'': 2020/03/14
<lang qbasic>FOR n = 10 TO 0 STEP -1
<syntaxhighlight lang="qbasic">FOR n = 10 TO 0 STEP -1
PRINT n
PRINT n
NEXT</lang>
NEXT</syntaxhighlight>


==={{header|QBASIC}}===
==={{header|QuickBASIC}}===
<lang qbasic>for i = 10 to 0 step -1
<syntaxhighlight lang="qbasic">for i = 10 to 0 step -1
print i
print i
next i</lang>
next i</syntaxhighlight>

==={{header|Quite BASIC}}===
The [[#GW-BASIC|GW-BASIC]] solution works without any changes.

==={{header|Run BASIC}}===
{{works with|Just BASIC}}
{{works with|Liberty BASIC}}
<syntaxhighlight lang="lb">for i = 10 to 0 step -1
print i
next i
end</syntaxhighlight>


==={{header|TI-83 BASIC}}===
==={{header|TI-83 BASIC}}===
<syntaxhighlight lang="ti83b">:For(I,10,0,-1
<lang ti83b>
:For(I,10,0,-1
:Disp I
:Disp I
:End</syntaxhighlight>
:End
</lang>


==={{header|TI-89 BASIC}}===
==={{header|TI-89 BASIC}}===
<lang ti89b>Local i
<syntaxhighlight lang="ti89b">Local i
For i, 10, 0, –1
For i, 10, 0, –1
Disp i
Disp i
EndFor</lang>
EndFor</syntaxhighlight>


==={{header|True BASIC}}===
==={{header|True BASIC}}===
{{works with|QBasic}}
{{works with|QBasic}}
<lang basic>FOR i = 10 TO 0 STEP -1
<syntaxhighlight lang="basic">FOR i = 10 TO 0 STEP -1
PRINT i; " ";
PRINT i; " ";
NEXT i
NEXT i
PRINT
PRINT
END</lang>
END</syntaxhighlight>


==={{header|Yabasic}}===
==={{Header|Tiny BASIC}}===
{{works with|QBasic}}
{{works with|TinyBasic}}
<syntaxhighlight lang="basic">10 REM Loops/Downward for
<lang Yabasic>for i = 10 to 0 step -1
20 LET I = 10
print i, " ";
30 IF I = -1 THEN END
next i
40 PRINT I
print
50 LET I = I - 1
end</lang>
60 GOTO 30
70 END</syntaxhighlight>

==={{header|VBA}}===
<syntaxhighlight lang="vb">For i = 10 To 0 Step -1
Debug.Print i
Next i</syntaxhighlight>

==={{header|Visual Basic .NET}}===
<syntaxhighlight lang="vbnet">For i = 10 To 0 Step -1
Console.WriteLine(i)
Next</syntaxhighlight>


==={{header|XBasic}}===
==={{header|XBasic}}===
{{works with|Windows XBasic}}
{{works with|Windows XBasic}}
<lang xbasic>PROGRAM "downwardfor"
<syntaxhighlight lang="xbasic">PROGRAM "downwardfor"


DECLARE FUNCTION Entry()
DECLARE FUNCTION Entry()
Line 616: Line 796:
NEXT i%
NEXT i%
END FUNCTION
END FUNCTION
END PROGRAM</lang>
END PROGRAM</syntaxhighlight>

==={{header|Yabasic}}===
{{works with|QBasic}}
<syntaxhighlight lang="yabasic">for i = 10 to 0 step -1
print i, " ";
next i
print
end</syntaxhighlight>


==={{header|ZX Spectrum Basic}}===
==={{header|ZX Spectrum Basic}}===
<lang zxbasic>10 FOR l = 10 TO 0 STEP -1
<syntaxhighlight lang="zxbasic">10 FOR l = 10 TO 0 STEP -1
20 PRINT l
20 PRINT l
30 NEXT l</lang>
30 NEXT l</syntaxhighlight>


=={{header|Batch File}}==
=={{header|Batch File}}==
<lang dos>@echo off
<syntaxhighlight lang="dos">@echo off
for /l %%D in (10,-1,0) do echo %%D</lang>
for /l %%D in (10,-1,0) do echo %%D</syntaxhighlight>


=={{header|bc}}==
=={{header|bc}}==
<lang bc>for (i = 10; i >= 0; i--) i
<syntaxhighlight lang="bc">for (i = 10; i >= 0; i--) i
quit</lang>
quit</syntaxhighlight>


=={{header|Befunge}}==
=={{header|Befunge}}==
<lang befunge>55+>:.:v
<syntaxhighlight lang="befunge">55+>:.:v
@ ^ -1_</lang>
@ ^ -1_</syntaxhighlight>


=={{header|BQN}}==
=={{header|BQN}}==
Line 639: Line 827:
Each (<code>¨</code>) is an operator in BQN that helps with emulating loops like for and foreach.
Each (<code>¨</code>) is an operator in BQN that helps with emulating loops like for and foreach.


<lang bqn>•Show¨⌽↕11</lang>
<syntaxhighlight lang="bqn">•Show¨⌽↕11</syntaxhighlight>


=={{header|Bracmat}}==
=={{header|Bracmat}}==
<lang bracmat> 10:?i
<syntaxhighlight lang="bracmat"> 10:?i
& whl'(out$!i&!i+-1:~<0:?i)</lang>
& whl'(out$!i&!i+-1:~<0:?i)</syntaxhighlight>


=={{header|Brainf***}}==
=={{header|Brainf***}}==
<lang brainf***>>++++++++[-<++++++>] //cell 0 now contains 48 the ASCII code for "0"
<syntaxhighlight lang="brainf***">>++++++++[-<++++++>] //cell 0 now contains 48 the ASCII code for "0"
<+.-. //print the digits 1 and 0
<+.-. //print the digits 1 and 0
>++++++++++. //cell 1 now contains the carriage return; print it!
>++++++++++. //cell 1 now contains the carriage return; print it!
Line 652: Line 840:
<<+++++++++>> //cell 0 now contains 57 the ASCII code for "9"
<<+++++++++>> //cell 0 now contains 57 the ASCII code for "9"
[<<.->.>-] //print and decrement the display digit; print a newline; decrement the loop variable
[<<.->.>-] //print and decrement the display digit; print a newline; decrement the loop variable
<<.>. //print the final 0 and a final newline</lang>
<<.>. //print the final 0 and a final newline</syntaxhighlight>


=={{header|Brat}}==
=={{header|Brat}}==
<lang brat>10.to 0 { n | p n }</lang>
<syntaxhighlight lang="brat">10.to 0 { n | p n }</syntaxhighlight>


=={{header|C}}==
=={{header|C}}==
<lang c>int i;
<syntaxhighlight lang="c">int i;
for(i = 10; i >= 0; --i)
for(i = 10; i >= 0; --i)
printf("%d\n",i);</lang>
printf("%d\n",i);</syntaxhighlight>


=={{header|C sharp|C#}}==
=={{header|C sharp|C#}}==


<lang csharp>for (int i = 10; i >= 0; i--)
<syntaxhighlight lang="csharp">for (int i = 10; i >= 0; i--)
{
{
Console.WriteLine(i);
Console.WriteLine(i);
}</lang>
}</syntaxhighlight>


=={{header|C++}}==
=={{header|C++}}==
<lang cpp>for(int i = 10; i >= 0; --i)
<syntaxhighlight lang="cpp">for(int i = 10; i >= 0; --i)
std::cout << i << "\n";</lang>
std::cout << i << "\n";</syntaxhighlight>

=={{header|C3}}==
<syntaxhighlight lang="c3">for (int i = 10; i >= 0; i--)
{
io::printn(i);
}</syntaxhighlight>


=={{header|Ceylon}}==
=={{header|Ceylon}}==
<lang ceylon>for (i in 10..0) {
<syntaxhighlight lang="ceylon">for (i in 10..0) {
print(i);
print(i);
}</lang>
}</syntaxhighlight>


=={{header|Chapel}}==
=={{header|Chapel}}==


<lang chapel>for i in 1..10 by -1 do
<syntaxhighlight lang="chapel">for i in 1..10 by -1 do
writeln(i);</lang>
writeln(i);</syntaxhighlight>


In case you wonder why it is not written as <tt>10..1 by -1</tt>: <tt>by</tt> is an operator that works on ranges, and it should work the same when the range was defined earlier, like in
In case you wonder why it is not written as <tt>10..1 by -1</tt>: <tt>by</tt> is an operator that works on ranges, and it should work the same when the range was defined earlier, like in


<lang chapel>var r = 1..10;
<syntaxhighlight lang="chapel">var r = 1..10;
for i in r by -1 do { ... }</lang>
for i in r by -1 do { ... }</syntaxhighlight>


=={{header|Clipper}}==
=={{header|Clipper}}==
<lang clipper> FOR i := 10 TO 0 STEP -1
<syntaxhighlight lang="clipper"> FOR i := 10 TO 0 STEP -1
? i
? i
NEXT</lang>
NEXT</syntaxhighlight>


=={{header|Clojure}}==
=={{header|Clojure}}==
<lang csharp>(doseq [x (range 10 -1 -1)] (println x))</lang>
<syntaxhighlight lang="csharp">(doseq [x (range 10 -1 -1)] (println x))</syntaxhighlight>


=={{header|COBOL}}==
=={{header|COBOL}}==
free-form
free-form
<lang cobol>identification division.
<syntaxhighlight lang="cobol">identification division.
program-id. countdown.
program-id. countdown.
environment division.
environment division.
Line 711: Line 905:
display counter-disp
display counter-disp
end-perform
end-perform
stop run.</lang>
stop run.</syntaxhighlight>
{{out}}
{{out}}
<pre>10
<pre>10
Line 728: Line 922:
This could be written either in the array comprehension style,
This could be written either in the array comprehension style,
or in "regular" for loop style.
or in "regular" for loop style.
<lang coffeescript># The more compact "array comprehension" style
<syntaxhighlight lang="coffeescript"># The more compact "array comprehension" style
console.log i for i in [10..0]
console.log i for i in [10..0]


Line 736: Line 930:


# More compact version of the above
# More compact version of the above
for i in [10..0] then console.log i</lang>
for i in [10..0] then console.log i</syntaxhighlight>
<pre>10
<pre>10
9
9
Line 752: Line 946:
=={{header|ColdFusion}}==
=={{header|ColdFusion}}==
With tags:
With tags:
<lang cfm><cfloop index = "i" from = "10" to = "0" step = "-1">
<syntaxhighlight lang="cfm"><cfloop index = "i" from = "10" to = "0" step = "-1">
#i#
#i#
</cfloop></lang>
</cfloop></syntaxhighlight>
With script:
With script:
<lang cfm><cfscript>
<syntaxhighlight lang="cfm"><cfscript>
for( i = 10; i <= 0; i-- )
for( i = 10; i <= 0; i-- )
{
{
writeOutput( i );
writeOutput( i );
}
}
</cfscript></lang>
</cfscript></syntaxhighlight>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==
<lang lisp>(loop for i from 10 downto 1 do
<syntaxhighlight lang="lisp">(loop for i from 10 downto 1 do
(print i))</lang>
(print i))</syntaxhighlight>


=== Using DO ===
=== Using DO ===
<lang lisp>
<syntaxhighlight lang="lisp">
(do ((n 10 (decf n))) ; Initialize to 0 and downward in every loop
(do ((n 10 (decf n))) ; Initialize to 0 and downward in every loop
((< n 0)) ; Break condition when negative
((< n 0)) ; Break condition when negative
(print n)) ; On every loop print value
(print n)) ; On every loop print value
</syntaxhighlight>
</lang>


=== Using Tagbody and Go ===
=== Using Tagbody and Go ===
<lang lisp>
<syntaxhighlight lang="lisp">
(let ((count 10)) ; Create local variable count = 10
(let ((count 10)) ; Create local variable count = 10
(tagbody
(tagbody
Line 783: Line 977:
(if (not (< count 0)) ; Ends loop when negative
(if (not (< count 0)) ; Ends loop when negative
(go dec)))) ; Loops back to tag dec
(go dec)))) ; Loops back to tag dec
</syntaxhighlight>
</lang>


=== Using Recursion ===
=== Using Recursion ===
<lang lisp>
<syntaxhighlight lang="lisp">
(defun down-to-0 (count)
(defun down-to-0 (count)
(print count)
(print count)
Line 792: Line 986:
(down-to-0 (1- count))))
(down-to-0 (1- count))))
(down-to-0 10)
(down-to-0 10)
</syntaxhighlight>
</lang>


{{out}}
{{out}}
Line 809: Line 1,003:
</pre>
</pre>


=={{header|Computer/zero Assembly}}==
<syntaxhighlight lang="6502asm">LDA 28
SUB 29
STA 31
STA 28
BRZ 6 ;branch on zero to STP
JMP 0
STP
...
org 28
byte 11
byte 1
byte 0</syntaxhighlight>

{{out}}[http://www.edmundgriffiths.com/czero.html?hexdump=3c9d5f5ca6c0e00000000000000000000000000000000000000000000b01000a Emulator with program loaded]
=={{header|Crystal}}==
=={{header|Crystal}}==
<lang crystal>10.step(to: 0, by: -1).each { |i|
<syntaxhighlight lang="crystal">10.step(to: 0, by: -1).each { |i|
puts i
puts i
}
}
</syntaxhighlight>
</lang>


=={{header|D}}==
=={{header|D}}==
<lang d>import std.stdio: writeln;
<syntaxhighlight lang="d">import std.stdio: writeln;


void main() {
void main() {
Line 825: Line 1,034:
foreach_reverse (i ; 0 .. 10 + 1)
foreach_reverse (i ; 0 .. 10 + 1)
writeln(i);
writeln(i);
}</lang>
}</syntaxhighlight>
{{out}}
{{out}}
<pre>10
<pre>10
Line 851: Line 1,060:
0</pre>
0</pre>


=={{header|dc}}==
=={{header|Dart}}==
<syntaxhighlight lang="dart">void main() {
for (var i = 10; i >= 0; --i) {
print(i);
}
}</syntaxhighlight>


=={{header|dc}}==
does not use GNU extensions
does not use GNU extensions


Line 865: Line 1,080:
uses the macro f - [p] to print, this can be replaced by any complex expressions.
uses the macro f - [p] to print, this can be replaced by any complex expressions.


<lang dc>c
<syntaxhighlight lang="dc">c


[macro s(swap) - (a b : b a)]s.
[macro s(swap) - (a b : b a)]s.
Line 877: Line 1,092:


0 10 ldx [p] sf !<m
0 10 ldx [p] sf !<m
q</lang>
q</syntaxhighlight>


Using it
Using it
<lang dc>|dc < ./for.dc
<syntaxhighlight lang="dc">|dc < ./for.dc
10
10
9
9
...
...
0</lang>
0</syntaxhighlight>


=={{header|Delphi}}==
=={{header|Delphi}}==
Line 890: Line 1,105:


=={{header|Draco}}==
=={{header|Draco}}==
<lang draco>proc nonrec main() void:
<syntaxhighlight lang="draco">proc nonrec main() void:
byte i;
byte i;
for i from 10 downto 0 do
for i from 10 downto 0 do
write(i," ")
write(i," ")
od
od
corp</lang>
corp</syntaxhighlight>
{{out}}
{{out}}
<pre>10 9 8 7 6 5 4 3 2 1 0</pre>
<pre>10 9 8 7 6 5 4 3 2 1 0</pre>


=={{header|DWScript}}==
=={{header|DWScript}}==
<lang pascal>for i := 10 downto 0 do
<syntaxhighlight lang="pascal">for i := 10 downto 0 do
PrintLn(i);</lang>
PrintLn(i);</syntaxhighlight>


=={{header|E}}==
=={{header|E}}==


<lang e>for i in (0..10).descending() { println(i) }</lang>
<syntaxhighlight lang="e">for i in (0..10).descending() { println(i) }</syntaxhighlight>


=={{header|EasyLang}}==
=={{header|EasyLang}}==


<lang>for i = 10 downto 0
<syntaxhighlight lang="text">for i = 10 downto 0
print i
print i
.</lang>
.</syntaxhighlight>


=={{header|EchoLisp}}==
=={{header|EchoLisp}}==
<lang scheme>
<syntaxhighlight lang="scheme">
(for ((longtemps-je-me-suis-couché-de-bonne-heure (in-range 10 -1 -1)))
(for ((longtemps-je-me-suis-couché-de-bonne-heure (in-range 10 -1 -1)))
(write longtemps-je-me-suis-couché-de-bonne-heure))
(write longtemps-je-me-suis-couché-de-bonne-heure))
→ 10 9 8 7 6 5 4 3 2 1 0
→ 10 9 8 7 6 5 4 3 2 1 0
</syntaxhighlight>
</lang>


=={{header|EDSAC order code}}==
=={{header|EDSAC order code}}==
Including a full routine to print integers in decimal would probably be overkill; at least, it would obscure what is essentially a simple program. We therefore cheat slightly by printing "10\r\n" manually, and using the loop only to print "9\r\n" down to "0\r\n". Note that character codes are stored in the high 5 bits of the 17-bit EDSAC word: so we actually count down from 36,864 to 0 in steps of 4,096.
Including a full routine to print integers in decimal would probably be overkill; at least, it would obscure what is essentially a simple program. We therefore cheat slightly by printing "10\r\n" manually, and using the loop only to print "9\r\n" down to "0\r\n". Note that character codes are stored in the high 5 bits of the 17-bit EDSAC word: so we actually count down from 36,864 to 0 in steps of 4,096.
<lang edsac>[ Loop with downward counter
<syntaxhighlight lang="edsac">[ Loop with downward counter
==========================
==========================


Line 975: Line 1,190:
[ 20 ] OF [ character c = '9' ]
[ 20 ] OF [ character c = '9' ]


EZPF [ start when loaded ]</lang>
EZPF [ start when loaded ]</syntaxhighlight>


=={{header|EGL}}==
=={{header|EGL}}==
<lang EGL>for ( i int from 10 to 0 decrement by 1 )
<syntaxhighlight lang="egl">for ( i int from 10 to 0 decrement by 1 )
SysLib.writeStdout( i );
SysLib.writeStdout( i );
end</lang>
end</syntaxhighlight>


=={{header|Ela}}==
=={{header|Ela}}==
Line 986: Line 1,201:
===Standard Approach===
===Standard Approach===


<lang ela>open monad io
<syntaxhighlight lang="ela">open monad io


each [] = do return ()
each [] = do return ()
Line 993: Line 1,208:
each xs
each xs


each [10,9..0] ::: IO</lang>
each [10,9..0] ::: IO</syntaxhighlight>


===Alternative Approach===
===Alternative Approach===


<lang ela>open monad io
<syntaxhighlight lang="ela">open monad io


countDown m n | n < m = do return ()
countDown m n | n < m = do return ()
Line 1,004: Line 1,219:
countDown m (n - 1)
countDown m (n - 1)


_ = countDown 0 10 ::: IO</lang>
_ = countDown 0 10 ::: IO</syntaxhighlight>


=={{header|Elixir}}==
=={{header|Elixir}}==
<lang elixir>iex(1)> Enum.each(10..0, fn i -> IO.puts i end)
<syntaxhighlight lang="elixir">iex(1)> Enum.each(10..0, fn i -> IO.puts i end)
10
10
9
9
Line 1,019: Line 1,234:
1
1
0
0
:ok</lang>
:ok</syntaxhighlight>


=={{header|Erlang}}==
=={{header|Erlang}}==
<lang erlang>%% Implemented by Arjun Sunel
<syntaxhighlight lang="erlang">%% Implemented by Arjun Sunel
-module(downward_loop).
-module(downward_loop).
-export([main/0]).
-export([main/0]).
Line 1,036: Line 1,251:
io:format("~p~n",[N])
io:format("~p~n",[N])
end.
end.
</syntaxhighlight>
</lang>
{{out}}
{{out}}
<pre>10
<pre>10
Line 1,052: Line 1,267:


=={{header|ERRE}}==
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
<lang ERRE>
FOR I%=10 TO 0 STEP -1 DO
FOR I%=10 TO 0 STEP -1 DO
PRINT(I%)
PRINT(I%)
END FOR
END FOR
</syntaxhighlight>
</lang>


=={{header|Euphoria}}==
=={{header|Euphoria}}==
<lang euphoria>for i = 10 to 0 by -1 do
<syntaxhighlight lang="euphoria">for i = 10 to 0 by -1 do
? i
? i
end for</lang>
end for</syntaxhighlight>


=={{header|F_Sharp|F#}}==
=={{header|F_Sharp|F#}}==
Using an enumerable expression:
Using an enumerable expression:
<lang fsharp>for i in 10..-1..0 do
<syntaxhighlight lang="fsharp">for i in 10..-1..0 do
printfn "%d" i</lang>
printfn "%d" i</syntaxhighlight>


Using the 'downto' keyword:
Using the 'downto' keyword:
<lang fsharp>for i = 10 downto 0 do
<syntaxhighlight lang="fsharp">for i = 10 downto 0 do
printfn "%d" i</lang>
printfn "%d" i</syntaxhighlight>


=={{header|Factor}}==
=={{header|Factor}}==
<lang factor>11 <iota> <reversed> [ . ] each</lang>
<syntaxhighlight lang="factor">11 <iota> <reversed> [ . ] each</syntaxhighlight>


=={{header|FALSE}}==
=={{header|FALSE}}==
<lang false>10[$0>][$." "1-]#.</lang>
<syntaxhighlight lang="false">10[$0>][$." "1-]#.</syntaxhighlight>


=={{header|Fantom}}==
=={{header|Fantom}}==


<lang fantom>
<syntaxhighlight lang="fantom">
class DownwardFor
class DownwardFor
{
{
Line 1,091: Line 1,306:
}
}
}
}
</syntaxhighlight>
</lang>

=={{header|FBSL}}==
<lang qbasic>#APPTYPE CONSOLE

FOR DIM i = 10 DOWNTO 0
PRINT i
NEXT

PAUSE
</lang>


=={{header|Fermat}}==
=={{header|Fermat}}==
<lang fermat>for i = 10 to 0 by -1 do !!i; od</lang>
<syntaxhighlight lang="fermat">for i = 10 to 0 by -1 do !!i; od</syntaxhighlight>


=={{header|Forth}}==
=={{header|Forth}}==
Unlike the incrementing 10 0 DO-LOOP, this will print eleven numbers. The LOOP words detect crossing the floor of the end limit.
Unlike the incrementing 10 0 DO-LOOP, this will print eleven numbers. The LOOP words detect crossing the floor of the end limit.
<lang forth>: loop-down 0 10 do i . -1 +loop ;</lang>
<syntaxhighlight lang="forth">: loop-down 0 10 do i . -1 +loop ;</syntaxhighlight>


=={{header|Fortran}}==
=={{header|Fortran}}==
{{Works with|Fortran|90 and later}}
{{Works with|Fortran|90 and later}}
<lang fortran>DO i = 10, 0, -1
<syntaxhighlight lang="fortran">DO i = 10, 0, -1
WRITE(*, *) i
WRITE(*, *) i
END DO</lang>
END DO</syntaxhighlight>


{{works with|Fortran|77 and later}}
{{works with|Fortran|77 and later}}
<lang fortran> PROGRAM DOWNWARDFOR
<syntaxhighlight lang="fortran"> PROGRAM DOWNWARDFOR
C Initialize the loop parameters.
C Initialize the loop parameters.
INTEGER I, START, FINISH, STEP
INTEGER I, START, FINISH, STEP
Line 1,128: Line 1,333:


STOP
STOP
END</lang>
END</syntaxhighlight>


=={{header|Frink}}==
=={{header|Frink}}==
<lang frink>
<syntaxhighlight lang="frink">
for i = 10 to 0 step -1
for i = 10 to 0 step -1
println[i]
println[i]
</syntaxhighlight>
</lang>


=={{header|GAP}}==
=={{header|GAP}}==
<lang gap>for i in [10, 9 .. 0] do
<syntaxhighlight lang="gap">for i in [10, 9 .. 0] do
Print(i, "\n");
Print(i, "\n");
od;</lang>
od;</syntaxhighlight>


=={{header|GML}}==
=={{header|GML}}==
<lang GML>for(i = 10; i >= 0; i -= 1)
<syntaxhighlight lang="gml">for(i = 10; i >= 0; i -= 1)
show_message(string(i))</lang>
show_message(string(i))</syntaxhighlight>


=={{header|Go}}==
=={{header|Go}}==
<lang go>for i := 10; i >= 0; i-- {
<syntaxhighlight lang="go">for i := 10; i >= 0; i-- {
fmt.Println(i)
fmt.Println(i)
}</lang>
}</syntaxhighlight>
::<lang go>package main
::<syntaxhighlight lang="go">package main


import "fmt"
import "fmt"
Line 1,162: Line 1,367:
}
}
fmt.Println("blast off")
fmt.Println("blast off")
}</lang>
}</syntaxhighlight>


=={{header|Groovy}}==
=={{header|Groovy}}==
<lang groovy>for (i in (10..0)) {
<syntaxhighlight lang="groovy">for (i in (10..0)) {
println i
println i
}</lang>
}</syntaxhighlight>


=={{header|Harbour}}==
=={{header|Harbour}}==
<lang visualfoxpro>FOR i := 10 TO 0 STEP -1
<syntaxhighlight lang="visualfoxpro">FOR i := 10 TO 0 STEP -1
? i
? i
NEXT</lang>
NEXT</syntaxhighlight>


=={{header|Haskell}}==
=={{header|Haskell}}==
<lang haskell>import Control.Monad
<syntaxhighlight lang="haskell">import Control.Monad


main :: IO ()
main :: IO ()
main = forM_ [10,9 .. 0] print</lang>
main = forM_ [10,9 .. 0] print</syntaxhighlight>


=={{header|Haxe}}==
=={{header|Haxe}}==
Line 1,184: Line 1,389:
Haxe lacks a downward for-loop, but it is easy to create an iterator to serve that purpose.
Haxe lacks a downward for-loop, but it is easy to create an iterator to serve that purpose.


<lang haxe>class Step {
<syntaxhighlight lang="haxe">class Step {
var end:Int;
var end:Int;
var step:Int;
var step:Int;
Line 1,205: Line 1,410:
}
}
}
}
}</lang>
}</syntaxhighlight>


{{out}}
{{out}}
Line 1,211: Line 1,416:


=={{header|hexiscript}}==
=={{header|hexiscript}}==
<lang hexiscript>for let i 10; i >= 0; i--
<syntaxhighlight lang="hexiscript">for let i 10; i >= 0; i--
println i
println i
endfor</lang>
endfor</syntaxhighlight>


=={{header|HicEst}}==
=={{header|HicEst}}==
<lang hicest>DO i = 10, 0, -1
<syntaxhighlight lang="hicest">DO i = 10, 0, -1
WRITE() i
WRITE() i
ENDDO</lang>
ENDDO</syntaxhighlight>


=={{header|HolyC}}==
=={{header|HolyC}}==
<lang holyc>I8 i;
<syntaxhighlight lang="holyc">I8 i;
for (i = 10; i >= 0; --i)
for (i = 10; i >= 0; --i)
Print("%d\n", i);</lang>
Print("%d\n", i);</syntaxhighlight>


=={{header|Icon}} and {{header|Unicon}}==
=={{header|Icon}} and {{header|Unicon}}==
There are four looping controls 'every', 'repeat', 'until', and 'while' (see [[Icon%2BUnicon/Intro#Looping_Controls|Introduction to Icon and Unicon/Looping Controls]] for more information.) The closest to a 'for' loop is 'every'.
There are four looping controls 'every', 'repeat', 'until', and 'while' (see [[Icon%2BUnicon/Intro#Looping_Controls|Introduction to Icon and Unicon/Looping Controls]] for more information.) The closest to a 'for' loop is 'every'.
<lang Icon>every i := 10 to 0 by -1 do {
<syntaxhighlight lang="icon">every i := 10 to 0 by -1 do {
# things to do within the loop
# things to do within the loop
}
}
</syntaxhighlight>
</lang>


=={{header|IDL}}==
=={{header|IDL}}==
Line 1,236: Line 1,441:
Using a loop (with an "increment of minus one" ):
Using a loop (with an "increment of minus one" ):


<lang idl>for i=10,0,-1 do print,i</lang>
<syntaxhighlight lang="idl">for i=10,0,-1 do print,i</syntaxhighlight>


But in IDL one would rarely use loops (for anything) since practically everything can be done with vectors/arrays.
But in IDL one would rarely use loops (for anything) since practically everything can be done with vectors/arrays.
Line 1,242: Line 1,447:
The "IDL way of doing things" for the countdown requested in the task would probably be this:
The "IDL way of doing things" for the countdown requested in the task would probably be this:


<lang idl>print,10-indgen(11)</lang>
<syntaxhighlight lang="idl">print,10-indgen(11)</syntaxhighlight>


=={{header|Inform 6}}==
=={{header|Inform 6}}==
<lang Inform 6>for(i = 10: i >= 0: i--)
<syntaxhighlight lang="inform 6">for(i = 10: i >= 0: i--)
print i, "^";</lang>
print i, "^";</syntaxhighlight>


=={{header|Io}}==
=={{header|Io}}==
<lang Io>for(i,10,0,-1,
<syntaxhighlight lang="io">for(i,10,0,-1,
i println
i println
)</lang>
)</syntaxhighlight>


=={{header|J}}==
=={{header|J}}==
J is array-oriented, so there is very little need for loops. For example, one could satisfy this task this way:
J is array-oriented, so there is very little need for loops. For example, one could satisfy this task this way:


,. i. -11
<syntaxhighlight lang=J> ,. i. -11
10
9
8
7
6
5
4
3
2
1
0
</syntaxhighlight>


J does support loops for those times they can't be avoided (just like many languages support gotos for those time they can't be avoided).
J does support loops for those times they can't be avoided (just like many languages support gotos for those time they can't be avoided).
<lang j>3 : 0 ] 11
<syntaxhighlight lang="j">3 : 0 ] 11
for_i. i. - y do.
for_i. i. - y do.
smoutput i
smoutput i
end.
end.
)</lang>
)</syntaxhighlight>


Though it's rare to see J code like this.
Though it's rare to see J code like this.
Line 1,269: Line 1,486:
That said, a convenient routine for generating intervals in J might be:
That said, a convenient routine for generating intervals in J might be:


<lang J>thru=: <. + i.@(+*)@-~</lang>
<syntaxhighlight lang="j">thru=: <. + i.@(+*)@-~</syntaxhighlight>


For example:
For example:


<lang J> 10 thru 0
<syntaxhighlight lang="j"> 10 thru 0
10 9 8 7 6 5 4 3 2 1 0</lang>
10 9 8 7 6 5 4 3 2 1 0</syntaxhighlight>


(or <code>,.10 thru 0</code> if you want each number on a line by itself)
(or <code>,.10 thru 0</code> if you want each number on a line by itself)
Line 1,281: Line 1,498:


=={{header|Java}}==
=={{header|Java}}==
<lang java>
<syntaxhighlight lang="java">
for (int i = 10; i >= 0; i--) {
for (int i = 10; i >= 0; i--) {
System.out.println(i);
System.out.println(i);
}
}
</syntaxhighlight>
</lang>


=={{header|JavaScript}}==
=={{header|JavaScript}}==
<lang javascript>for (var i=10; i>=0; --i) print(i);</lang>
<syntaxhighlight lang="javascript">for (var i=10; i>=0; --i) print(i);</syntaxhighlight>


Alternatively, remaining for the moment within an imperative idiom of JavaScript, in which programs are composed of statements, we could trim the computational costs over longer reversed iterations by moving the mutation into the test, and dropping the third term of a for() statement:
Alternatively, remaining for the moment within an imperative idiom of JavaScript, in which programs are composed of statements, we could trim the computational costs over longer reversed iterations by moving the mutation into the test, and dropping the third term of a for() statement:


<lang JavaScript>for (var i = 11; i--;) console.log(i);</lang>
<syntaxhighlight lang="javascript">for (var i = 11; i--;) console.log(i);</syntaxhighlight>


and it sometimes might be more natural, especially at scales at which optimisation becomes an issue, to go one step further and express the same computation with the more economical while statement.
and it sometimes might be more natural, especially at scales at which optimisation becomes an issue, to go one step further and express the same computation with the more economical while statement.


<lang JavaScript>var i = 11;
<syntaxhighlight lang="javascript">var i = 11;
while (i--) console.log(i);</lang>
while (i--) console.log(i);</syntaxhighlight>


In a functional idiom of JavaScript, however, we need an expression with a value (which can be composed within superordinate expressions), rather than a statement, which produces a side-effect but returns no information-bearing value.
In a functional idiom of JavaScript, however, we need an expression with a value (which can be composed within superordinate expressions), rather than a statement, which produces a side-effect but returns no information-bearing value.
Line 1,303: Line 1,520:
If we have grown over-attached to the English morpheme 'for', we might think first of turning to '''Array.forEach()''', and write something like:
If we have grown over-attached to the English morpheme 'for', we might think first of turning to '''Array.forEach()''', and write something like:


<lang JavaScript>function range(m, n) {
<syntaxhighlight lang="javascript">function range(m, n) {
return Array.apply(null, Array(n - m + 1)).map(
return Array.apply(null, Array(n - m + 1)).map(
function (x, i) {
function (x, i) {
Line 1,315: Line 1,532:
console.log(x);
console.log(x);
}
}
);</lang>
);</syntaxhighlight>




Line 1,322: Line 1,539:
We can get an expression (assuming that the range() function (above) is defined) but replacing Array.forEach with '''Array.map()'''
We can get an expression (assuming that the range() function (above) is defined) but replacing Array.forEach with '''Array.map()'''


<lang JavaScript>console.log(
<syntaxhighlight lang="javascript">console.log(
range(0, 10).reverse().map(
range(0, 10).reverse().map(
function (x) {
function (x) {
Line 1,328: Line 1,545:
}
}
).join('\n')
).join('\n')
);</lang>
);</syntaxhighlight>


but in this case, we are simply mapping an identity function over the values, so the expression simplifies down to:
but in this case, we are simply mapping an identity function over the values, so the expression simplifies down to:


<lang JavaScript>console.log(
<syntaxhighlight lang="javascript">console.log(
range(0, 10).reverse().join('\n')
range(0, 10).reverse().join('\n')
);</lang>
);</syntaxhighlight>


=={{header|jq}}==
=={{header|jq}}==
If range/3 is available in your jq:
If range/3 is available in your jq:
<lang jq>range(10;-1;-1)</lang>
<syntaxhighlight lang="jq">range(10;-1;-1)</syntaxhighlight>
Otherwise:
Otherwise:
range(-10;1) | -.
range(-10;1) | -.


=={{header|Julia}}==
=={{header|Julia}}==
<lang julia>for i in 10:-1:0
<syntaxhighlight lang="julia">for i in 10:-1:0
println(i)
println(i)
end</lang>
end</syntaxhighlight>


=={{header|Kotlin}}==
=={{header|Kotlin}}==
<lang scala>
<syntaxhighlight lang="scala">
// version 1.3.61
// version 1.3.61


Line 1,354: Line 1,571:
(10 downTo 0).forEach { println(it) }
(10 downTo 0).forEach { println(it) }
}
}
</syntaxhighlight>
</lang>


=={{header|Lambdatalk}}==
=={{header|Lambdatalk}}==
<lang scheme>
<syntaxhighlight lang="scheme">
{def downward_for
{def downward_for
{lambda {:i}
{lambda {:i}
Line 1,367: Line 1,584:
{downward_for 10}
{downward_for 10}
-> 10 9 8 7 6 5 4 3 2 1 0 (end of loop)
-> 10 9 8 7 6 5 4 3 2 1 0 (end of loop)
</syntaxhighlight>
</lang>


=={{header|langur}}==
=={{header|langur}}==
<syntaxhighlight lang="langur">for .i in 10..0 {
You can use a for in loop to count downward. You cannot use a for of loop for this.

<lang langur>for .i in 10..0 {
writeln .i
writeln .i
}</lang>
}</syntaxhighlight>


<lang langur>for .i = 10; .i > -1; .i -= 1 {
<syntaxhighlight lang="langur">for .i = 10; .i > -1; .i -= 1 {
writeln .i
writeln .i
}</lang>
}</syntaxhighlight>


=={{header|Lasso}}==
=={{header|Lasso}}==
<lang Lasso>loop(-from=10, -to=0, -by=-1) => {^ loop_count + ' ' ^}</lang>
<syntaxhighlight lang="lasso">loop(-from=10, -to=0, -by=-1) => {^ loop_count + ' ' ^}</syntaxhighlight>

=={{header|LDPL}}==
<syntaxhighlight lang="ldpl">data:
i is number

procedure:
for i from 10 to -1 step -1 do
display i lf
repeat</syntaxhighlight>


=={{header|Lhogho}}==
=={{header|Lhogho}}==
Slightly different syntax for <code>for</code> compared to Logo.
Slightly different syntax for <code>for</code> compared to Logo.
<lang logo>for "i [10 0] [print :i]</lang>
<syntaxhighlight lang="logo">for "i [10 0] [print :i]</syntaxhighlight>


=={{header|Lingo}}==
=={{header|Lingo}}==
<lang lingo>repeat with i = 10 down to 0
<syntaxhighlight lang="lingo">repeat with i = 10 down to 0
put i
put i
end repeat</lang>
end repeat</syntaxhighlight>


=={{header|Lisaac}}==
=={{header|Lisaac}}==
<lang Lisaac>10.downto 0 do { i : INTEGER;
<syntaxhighlight lang="lisaac">10.downto 0 do { i : INTEGER;
i.println;
i.println;
};</lang>
};</syntaxhighlight>


=={{header|LiveCode}}==
=={{header|LiveCode}}==
Livecode's repeat "for" variant does not have a "down to" form, in a function you would need to manually decrement a counter
Livecode's repeat "for" variant does not have a "down to" form, in a function you would need to manually decrement a counter
<lang LiveCode>local x=10
<syntaxhighlight lang="livecode">local x=10
repeat for 10 times
repeat for 10 times
put x & return
put x & return
add -1 to x
add -1 to x
end repeat</lang>
end repeat</syntaxhighlight>


A more idiomatic approach using "with" variant of repeat which does have a "down to" form
A more idiomatic approach using "with" variant of repeat which does have a "down to" form
<lang LiveCode>repeat with n=10 down to 1
<syntaxhighlight lang="livecode">repeat with n=10 down to 1
put n
put n
end repeat</lang>
end repeat</syntaxhighlight>


=={{header|Logo}}==
=={{header|Logo}}==
If the limit is less than the start, then FOR decrements the control variable. Otherwise, a fourth parameter could be given as a custom increment.
If the limit is less than the start, then FOR decrements the control variable. Otherwise, a fourth parameter could be given as a custom increment.
<lang logo>for [i 10 0] [print :i]</lang>
<syntaxhighlight lang="logo">for [i 10 0] [print :i]</syntaxhighlight>


=={{header|Lua}}==
=={{header|Lua}}==
<lang lua>
<syntaxhighlight lang="lua">
for i=10,0,-1 do
for i=10,0,-1 do
print(i)
print(i)
end
end
</syntaxhighlight>
</lang>


=={{header|M2000 Interpreter}}==
=={{header|M2000 Interpreter}}==
Line 1,429: Line 1,653:
There is a slower For, the For Next style:
There is a slower For, the For Next style:


<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
For i=1 to 10 step 2 : Print i : Next i
For i=1 to 10 step 2 : Print i : Next i
</syntaxhighlight>
</lang>
We have to use Exit For to exit from that type of For.
We have to use Exit For to exit from that type of For.


Line 1,441: Line 1,665:




<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Form 80, 50
Form 80, 50
Module Checkit {
Module Checkit {
Line 1,476: Line 1,700:
}
}
CheckIt
CheckIt
</syntaxhighlight>
</lang>


=={{header|M4}}==
=={{header|M4}}==
<lang M4>define(`for',
<syntaxhighlight lang="m4">define(`for',
`ifelse($#,0,``$0'',
`ifelse($#,0,``$0'',
`ifelse(eval($2 $3),1,
`ifelse(eval($2 $3),1,
Line 1,485: Line 1,709:


for(`x',`10',`>=0',`-1',`x
for(`x',`10',`>=0',`-1',`x
')</lang>
')</syntaxhighlight>


=={{header|Maple}}==
=={{header|Maple}}==
Using an explicit loop:
Using an explicit loop:
<lang Maple>for i from 10 to 0 by -1 do print(i) end:</lang>
<syntaxhighlight lang="maple">for i from 10 to 0 by -1 do print(i) end:</syntaxhighlight>
Pushing the loop into the kernel:
Pushing the loop into the kernel:
<lang Maple>seq(print(i),i=10..0,-1)</lang>
<syntaxhighlight lang="maple">seq(print(i),i=10..0,-1)</syntaxhighlight>


=={{header|Mathematica}}/{{header|Wolfram Language}}==
=={{header|Mathematica}}/{{header|Wolfram Language}}==
Line 1,499: Line 1,723:


Using For:
Using For:
<lang Mathematica>For[i = 10, i >= 0, i--, Print[i]]</lang>
<syntaxhighlight lang="mathematica">For[i = 10, i >= 0, i--, Print[i]]</syntaxhighlight>
Using Do:
Using Do:
<lang Mathematica>Do[Print[i], {i, 10, 0, -1}]</lang>
<syntaxhighlight lang="mathematica">Do[Print[i], {i, 10, 0, -1}]</syntaxhighlight>
Using Scan:
Using Scan:
<lang Mathematica>Scan[Print, Range[10, 0, -1]]</lang>
<syntaxhighlight lang="mathematica">Scan[Print, Range[10, 0, -1]]</syntaxhighlight>


=={{header|MATLAB}} / {{header|Octave}}==
=={{header|MATLAB}} / {{header|Octave}}==


<lang Matlab> for k = 10:-1:0,
<syntaxhighlight lang="matlab"> for k = 10:-1:0,
printf('%d\n',k)
printf('%d\n',k)
end; </lang>
end; </syntaxhighlight>


A vectorized version of the code is
A vectorized version of the code is


<lang Matlab> printf('%d\n',10:-1:0); </lang>
<syntaxhighlight lang="matlab"> printf('%d\n',10:-1:0); </syntaxhighlight>


=={{header|Maxima}}==
=={{header|Maxima}}==
<lang maxima>for i from 10 thru 0 step -1 do print(i);</lang>
<syntaxhighlight lang="maxima">for i from 10 thru 0 step -1 do print(i);</syntaxhighlight>


=={{header|MAXScript}}==
=={{header|MAXScript}}==
<lang maxscript>for i in 10 to 0 by -1 do print i</lang>
<syntaxhighlight lang="maxscript">for i in 10 to 0 by -1 do print i</syntaxhighlight>


=={{header|Mercury}}==
=={{header|Mercury}}==
<lang>:- module loops_downward_for.
<syntaxhighlight lang="text">:- module loops_downward_for.
:- interface.
:- interface.


Line 1,535: Line 1,759:
io.write_int(I, !IO), io.nl(!IO)
io.write_int(I, !IO), io.nl(!IO)
),
),
int.fold_down(Print, 1, 10, !IO).</lang>
int.fold_down(Print, 1, 10, !IO).</syntaxhighlight>


=={{header|Metafont}}==
=={{header|Metafont}}==


<lang metafont>for i = 10 step -1 until 0: show i; endfor
<syntaxhighlight lang="metafont">for i = 10 step -1 until 0: show i; endfor
end</lang>
end</syntaxhighlight>


The basic set of macros for Metafont defines <tt>downto</tt>, so that we can write
The basic set of macros for Metafont defines <tt>downto</tt>, so that we can write


<lang metafont>for i = 10 downto 0: show i; endfor end</lang>
<syntaxhighlight lang="metafont">for i = 10 downto 0: show i; endfor end</syntaxhighlight>


=={{header|min}}==
=={{header|min}}==
{{works with|min|0.19.6}}
{{works with|min|0.19.6}}
<lang min>10 :n (n 0 >=) (n puts! n pred @n) while</lang>
<syntaxhighlight lang="min">10 :n (n 0 >=) (n puts! n pred @n) while</syntaxhighlight>
Or
Or
<lang min>10 (dup 0 <) 'pop (puts pred) () linrec</lang>
<syntaxhighlight lang="min">10 (dup 0 <) 'pop (puts pred) () linrec</syntaxhighlight>


=={{header|MiniScript}}==
=={{header|MiniScript}}==
<lang MiniScript>for i in range(10, 0)
<syntaxhighlight lang="miniscript">for i in range(10, 0)
print i
print i
end for</lang>
end for</syntaxhighlight>


=={{header|МК-61/52}}==
=={{header|МК-61/52}}==
<lang>1 0 П0 ИП0 L0 03 С/П</lang>
<syntaxhighlight lang="text">1 0 П0 ИП0 L0 03 С/П</syntaxhighlight>


=={{header|Modula-2}}==
=={{header|Modula-2}}==
<lang modula2>MODULE Downward;
<syntaxhighlight lang="modula2">MODULE Downward;
IMPORT InOut;
IMPORT InOut;


Line 1,572: Line 1,796:
InOut.WriteLn
InOut.WriteLn
END
END
END Downward.</lang>
END Downward.</syntaxhighlight>


=={{header|Modula-3}}==
=={{header|Modula-3}}==
<lang modula3>FOR i := 10 TO 0 BY -1 DO
<syntaxhighlight lang="modula3">FOR i := 10 TO 0 BY -1 DO
IO.PutInt(i);
IO.PutInt(i);
END;</lang>
END;</syntaxhighlight>


=={{header|MUMPS}}==
=={{header|MUMPS}}==
<lang MUMPS>LOOPDOWN
<syntaxhighlight lang="mumps">LOOPDOWN
NEW I FOR I=10:-1:1 WRITE I WRITE:I'=1 ", "
NEW I FOR I=10:-1:1 WRITE I WRITE:I'=1 ", "
KILL I QUIT</lang>
KILL I QUIT</syntaxhighlight>

=={{header|N/t/roff}}==
<syntaxhighlight lang="nroff">
.nr a 11 1
.while (\na > 0) \{\
\n-a
.\}
</syntaxhighlight>
{{out}}
<pre>10 9 8 7 6 5 4 3 2 1 0
</pre>


=={{header|Nemerle}}==
=={{header|Nemerle}}==
<lang Nemerle>for (i = 10; i >= 0; i--) {WriteLine($"$i")}</lang>
<syntaxhighlight lang="nemerle">for (i = 10; i >= 0; i--) {WriteLine($"$i")}</syntaxhighlight>
<lang Nemerle>foreach (i in [10, 9 .. 0]) {WriteLine($"$i")}</lang>
<syntaxhighlight lang="nemerle">foreach (i in [10, 9 .. 0]) {WriteLine($"$i")}</syntaxhighlight>


=={{header|NetRexx}}==
=={{header|NetRexx}}==
<lang NetRexx>/* NetRexx */
<syntaxhighlight lang="netrexx">/* NetRexx */
options replace format comments java crossref savelog symbols nobinary
options replace format comments java crossref savelog symbols nobinary


Line 1,598: Line 1,833:
say i_.right(2)
say i_.right(2)
end i_
end i_
</syntaxhighlight>
</lang>


=={{header|NewLISP}}==
=={{header|NewLISP}}==
<lang NewLISP>(for (i 10 0)
<syntaxhighlight lang="newlisp">(for (i 10 0)
(println i))</lang>
(println i))</syntaxhighlight>


=={{header|Nim}}==
=={{header|Nim}}==
<lang nim>for x in countdown(10,0): echo(x)</lang>
<syntaxhighlight lang="nim">for x in countdown(10,0): echo(x)</syntaxhighlight>
{{out}}
{{out}}
<pre>10
<pre>10
Line 1,618: Line 1,853:
1
1
0</pre>
0</pre>

=={{header|Nu}}==
<syntaxhighlight lang="nu">
for i in 10..0 {print $i}
</syntaxhighlight>


=={{header|Oberon-2}}==
=={{header|Oberon-2}}==
<lang oberon2>FOR i := 10 TO 0 BY -1 DO
<syntaxhighlight lang="oberon2">FOR i := 10 TO 0 BY -1 DO
Out.Int(i,0);
Out.Int(i,0);
END;</lang>
END;</syntaxhighlight>


=={{header|Objeck}}==
=={{header|Objeck}}==
<lang objeck>
<syntaxhighlight lang="objeck">
for(i := 10; i >= 0; i--;) {
for(i := 10; i >= 0; i--;) {
i->PrintLine();
i->PrintLine();
};
};
</syntaxhighlight>
</lang>


=={{header|OCaml}}==
=={{header|OCaml}}==
<lang ocaml>for i = 10 downto 0 do
<syntaxhighlight lang="ocaml">for i = 10 downto 0 do
Printf.printf "%d\n" i
Printf.printf "%d\n" i
done</lang>
done</syntaxhighlight>


=={{header|Octave}}==
=={{header|Octave}}==


<lang octave>for i = 10:-1:0
<syntaxhighlight lang="octave">for i = 10:-1:0
% ...
% ...
endfor</lang>
endfor</syntaxhighlight>


=={{header|Oforth}}==
=={{header|Oforth}}==


<lang Oforth>10 0 -1 step: i [ i println ]</lang>
<syntaxhighlight lang="oforth">10 0 -1 step: i [ i println ]</syntaxhighlight>


=={{header|Oz}}==
=={{header|Oz}}==
<lang oz>for I in 10..0;~1 do
<syntaxhighlight lang="oz">for I in 10..0;~1 do
{Show I}
{Show I}
end</lang>
end</syntaxhighlight>


=={{header|PARI/GP}}==
=={{header|PARI/GP}}==
<lang parigp>forstep(n=10,0,-1,print(n))</lang>
<syntaxhighlight lang="parigp">forstep(n=10,0,-1,print(n))</syntaxhighlight>


=={{header|Pascal}}==
=={{header|Pascal}}==
<lang pascal>for i := 10 downto 0 do
<syntaxhighlight lang="pascal">for i := 10 downto 0 do
writeln(i);</lang>
writeln(i);</syntaxhighlight>


=={{header|Peloton}}==
=={{header|Peloton}}==
English fixed-length opcodes
English fixed-length opcodes
<lang sgml><@ ITEFORLITLITLITLIT>0|<@ SAYVALFOR>...</@>|10|-1</@></lang>
<syntaxhighlight lang="sgml"><@ ITEFORLITLITLITLIT>0|<@ SAYVALFOR>...</@>|10|-1</@></syntaxhighlight>


Simplified Chinese variable-length opcodes
Simplified Chinese variable-length opcodes
<lang sgml><# 迭代迭代次数字串字串字串字串>0|<# 显示值迭代次数>...</#>|10|-1</#></lang>
<syntaxhighlight lang="sgml"><# 迭代迭代次数字串字串字串字串>0|<# 显示值迭代次数>...</#>|10|-1</#></syntaxhighlight>


=={{header|Perl}}==
=={{header|Perl}}==
<lang perl>foreach (reverse 0..10) {
<syntaxhighlight lang="perl">foreach (reverse 0..10) {
print "$_\n";
print "$_\n";
}</lang>
}</syntaxhighlight>


=={{header|Phix}}==
=={{header|Phix}}==
{{libheader|Phix/basics}}
{{libheader|Phix/basics}}
<!--<lang Phix>-->
<!--<syntaxhighlight lang="phix">-->
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">10</span> <span style="color: #008080;">to</span> <span style="color: #000000;">0</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">10</span> <span style="color: #008080;">to</span> <span style="color: #000000;">0</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">i</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">i</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</lang>-->
<!--</syntaxhighlight>-->

=={{header|Phixmonti}}==
<syntaxhighlight lang="Phixmonti">/# Rosetta Code problem: https://rosettacode.org/wiki/Loops/Downward_for
by Galileo, 11/2022 #/

include ..\Utilitys.pmt

( 10 0 -1 ) for ? endfor</syntaxhighlight>


=={{header|PHP}}==
=={{header|PHP}}==
<lang php>for ($i = 10; $i >= 0; $i--)
<syntaxhighlight lang="php">for ($i = 10; $i >= 0; $i--)
echo "$i\n";</lang>
echo "$i\n";</syntaxhighlight>
or
or
<lang php>foreach (range(10, 0) as $i)
<syntaxhighlight lang="php">foreach (range(10, 0) as $i)
echo "$i\n";</lang>
echo "$i\n";</syntaxhighlight>


=={{header|PicoLisp}}==
=={{header|PicoLisp}}==
<lang PicoLisp>(for (I 10 (ge0 I) (dec I))
<syntaxhighlight lang="picolisp">(for (I 10 (ge0 I) (dec I))
(println I) )</lang>
(println I) )</syntaxhighlight>
or:
or:
<lang PicoLisp>(mapc println (range 10 0))</lang>
<syntaxhighlight lang="picolisp">(mapc println (range 10 0))</syntaxhighlight>


=={{header|Pike}}==
=={{header|Pike}}==
<lang pike>int main(){
<syntaxhighlight lang="pike">int main(){
for(int i = 10; i >= 0; i--){
for(int i = 10; i >= 0; i--){
write(i + "\n");
write(i + "\n");
}
}
}</lang>
}</syntaxhighlight>

=={{header|PL/0}}==
<syntaxhighlight lang="pascal">
var i;
begin
i := 10;
while i > -1 do
begin
! i;
i := i - 1
end
end.
</syntaxhighlight>


=={{header|PL/I}}==
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
<lang PL/I>
do i = 10 to 0 by -1;
do i = 10 to 0 by -1;
put skip list (i);
put skip list (i);
end;
end;
</syntaxhighlight>
</lang>


=={{header|Plain English}}==
=={{header|Plain English}}==
One way might be:
One way might be:
<lang plainenglish>To run:
<syntaxhighlight lang="plainenglish">To run:
Start up.
Start up.
Put 11 into a counter.
Put 11 into a counter.
Line 1,721: Line 1,982:
Subtract 1 from the counter.
Subtract 1 from the counter.
If the counter is less than the number, say yes.
If the counter is less than the number, say yes.
Say no.</lang>
Say no.</syntaxhighlight>


=={{header|Pop11}}==
=={{header|Pop11}}==
<lang pop11>lvars i;
<syntaxhighlight lang="pop11">lvars i;
for i from 10 by -1 to 0 do
for i from 10 by -1 to 0 do
printf(i, '%p\n');
printf(i, '%p\n');
endfor;</lang>
endfor;</syntaxhighlight>


=={{header|PowerShell}}==
=={{header|PowerShell}}==
<lang powershell>for ($i = 10; $i -ge 0; $i--) {
<syntaxhighlight lang="powershell">for ($i = 10; $i -ge 0; $i--) {
$i
$i
}</lang>
}</syntaxhighlight>
Alternatively, the range operator might be used as well which simply returns a contiguous range of integers:
Alternatively, the range operator might be used as well which simply returns a contiguous range of integers:
<lang powershell>10..0</lang>
<syntaxhighlight lang="powershell">10..0</syntaxhighlight>


=={{header|Prolog}}==
=={{header|Prolog}}==
Although Prolog has a between(Lo,Hi,Value) iterator, there is no built in equivalent for iterating descending values. This is not a show stopper, as it's easy enough to write one.
Although Prolog has a between(Lo,Hi,Value) iterator, there is no built in equivalent for iterating descending values. This is not a show stopper, as it's easy enough to write one.
<lang Prolog>rfor(Hi,Lo,Hi) :- Hi >= Lo.
<syntaxhighlight lang="prolog">rfor(Hi,Lo,Hi) :- Hi >= Lo.
rfor(Hi,Lo,Val) :- Hi > Lo, H is Hi - 1, !, rfor(H,Lo,Val).
rfor(Hi,Lo,Val) :- Hi > Lo, H is Hi - 1, !, rfor(H,Lo,Val).


reverse_iter :-
reverse_iter :-
rfor(10,0,Val), write(Val), nl, fail.
rfor(10,0,Val), write(Val), nl, fail.
reverse_iter.</lang>
reverse_iter.</syntaxhighlight>
<pre>?- reverse_iter.
<pre>?- reverse_iter.
10
10
Line 1,760: Line 2,021:


=={{header|Python}}==
=={{header|Python}}==
<lang python>for i in xrange(10, -1, -1):
<syntaxhighlight lang="python">for i in xrange(10, -1, -1):
print i</lang>
print i</syntaxhighlight>


=== List comprehension ===
=== List comprehension ===


<lang python>[i for i in xrange(10, -1, -1)]</lang>
<syntaxhighlight lang="python">[i for i in xrange(10, -1, -1)]</syntaxhighlight>
<lang python>import pprint
<syntaxhighlight lang="python">import pprint
pprint.pprint([i for i in xrange(10, -1, -1)])
pprint.pprint([i for i in xrange(10, -1, -1)])
</syntaxhighlight>
</lang>


=={{header|Quackery}}==
=={{header|Quackery}}==


<lang Quackery>11 times [ i echo sp ]</lang>
<syntaxhighlight lang="quackery">11 times [ i echo sp ]</syntaxhighlight>


{{Out}}
{{Out}}
Line 1,779: Line 2,040:


=={{header|R}}==
=={{header|R}}==
<lang R>for(i in 10:0) {print(i)}</lang>
<syntaxhighlight lang="r">for(i in 10:0) {print(i)}</syntaxhighlight>


=={{header|Racket}}==
=={{header|Racket}}==
<lang racket>
<syntaxhighlight lang="racket">
#lang racket
#lang racket


(for ([i (in-range 10 -1 -1)])
(for ([i (in-range 10 -1 -1)])
(displayln i))
(displayln i))
</syntaxhighlight>
</lang>


=={{header|Raku}}==
=={{header|Raku}}==
Line 1,793: Line 2,054:
{{works with|Rakudo Star|2010.08}}
{{works with|Rakudo Star|2010.08}}


<lang perl6>for 10 ... 0 {
<syntaxhighlight lang="raku" line>for 10 ... 0 {
.say;
.say;
}</lang>
}</syntaxhighlight>


=={{header|REBOL}}==
=={{header|REBOL}}==
<lang REBOL>for i 10 0 -1 [print i]</lang>
<syntaxhighlight lang="rebol">for i 10 0 -1 [print i]</syntaxhighlight>


=={{header|Retro}}==
=={{header|Retro}}==
<lang Retro>11 [ putn space ] iterd</lang>
<syntaxhighlight lang="retro">11 [ putn space ] iterd</syntaxhighlight>


=={{header|REXX}}==
=={{header|REXX}}==
===version 1===
===version 1===
(equivalent to version 2 and version 3)
(equivalent to version 2 and version 3)
<lang rexx> do j=10 to 0 by -1
<syntaxhighlight lang="rexx"> do j=10 to 0 by -1
say j
say j
end</lang>
end</syntaxhighlight>


===version 2===
===version 2===
(equivalent to version 1 and version 3)
(equivalent to version 1 and version 3)
<lang rexx> do j=10 by -1 to 0
<syntaxhighlight lang="rexx"> do j=10 by -1 to 0
say j
say j
end</lang>
end</syntaxhighlight>


===version 3===
===version 3===
Line 1,820: Line 2,081:
<br><br>Anybody who programs like this should be hunted down and shot like dogs!
<br><br>Anybody who programs like this should be hunted down and shot like dogs!
<br><br>Hurrumph! Hurrumph!
<br><br>Hurrumph! Hurrumph!
<lang rexx> do j=10 by -2 to 0
<syntaxhighlight lang="rexx"> do j=10 by -2 to 0
say j
say j
j=j+1 /*this increments the DO index. Do NOT program like this! */
j=j+1 /*this increments the DO index. Do NOT program like this! */
end</lang>
end</syntaxhighlight>


===version 4===
===version 4===
This example isn't compliant to the task,
This example isn't compliant to the task,
but it shows that the increment/decrement can be a non-integer:
but it shows that the increment/decrement can be a non-integer:
<lang rexx> do j=30 to 1 by -.25
<syntaxhighlight lang="rexx"> do j=30 to 1 by -.25
say j
say j
end</lang>
end</syntaxhighlight>


=={{header|Ring}}==
=={{header|Ring}}==
count from 10 to 0 by -1 step:
count from 10 to 0 by -1 step:
<lang ring>
<syntaxhighlight lang="ring">
for i = 10 to 0 step -1 see i + nl next
for i = 10 to 0 step -1 see i + nl next
</syntaxhighlight>
</lang>

=={{header|RPL}}==
≪ 10 1 '''FOR''' n
n
-1 '''STEP'''


=={{header|Ruby}}==
=={{header|Ruby}}==
<lang ruby>10.downto(0) do |i|
<syntaxhighlight lang="ruby">10.downto(0) do |i|
puts i
puts i
end</lang>
end</syntaxhighlight>


=={{header|Rust}}==
=={{header|Rust}}==
<lang rust>fn main() {
<syntaxhighlight lang="rust">fn main() {
for i in (0..=10).rev() {
for i in (0..=10).rev() {
println!("{}", i);
println!("{}", i);
}
}
}</lang>
}</syntaxhighlight>


=={{header|Salmon}}==
=={{header|Salmon}}==
<lang Salmon>for (x; 10; x >= 0; -1)
<syntaxhighlight lang="salmon">for (x; 10; x >= 0; -1)
x!;</lang>
x!;</syntaxhighlight>


=={{header|Sather}}==
=={{header|Sather}}==
<lang sather>class MAIN is
<syntaxhighlight lang="sather">class MAIN is
main is
main is
i:INT;
i:INT;
Line 1,862: Line 2,129:
end;
end;
end;
end;
end;</lang>
end;</syntaxhighlight>

=={{header|S-BASIC}}==
<syntaxhighlight lang="BASIC">
var i = integer
for i = 10 to 1 step -1
print i;
next i

end
</syntaxhighlight>
{{out}}
<pre>
10 9 8 7 6 5 4 3 2 1
</pre>


=={{header|Scala}}==
=={{header|Scala}}==
<lang scala>for(i <- 10 to 0 by -1) println(i)
<syntaxhighlight lang="scala">for(i <- 10 to 0 by -1) println(i)
//or
//or
10 to 0 by -1 foreach println</lang>
10 to 0 by -1 foreach println</syntaxhighlight>


=={{header|Scheme}}==
=={{header|Scheme}}==
<lang scheme>(do ((i 10 (- i 1)))
<syntaxhighlight lang="scheme">(do ((i 10 (- i 1)))
((< i 0))
((< i 0))
(display i)
(display i)
(newline))</lang>
(newline))</syntaxhighlight>


=={{header|Scilab}}==
=={{header|Scilab}}==
{{works with|Scilab|5.5.1}}
{{works with|Scilab|5.5.1}}
<lang>for i=10:-1:0
<syntaxhighlight lang="text">for i=10:-1:0
printf("%d\n",i)
printf("%d\n",i)
end</lang>
end</syntaxhighlight>
{{out}}
{{out}}
<pre style="height:20ex">
<pre style="height:20ex">
Line 1,896: Line 2,177:


=={{header|Seed7}}==
=={{header|Seed7}}==
<lang seed7>for i range 10 downto 0 do
<syntaxhighlight lang="seed7">for i range 10 downto 0 do
writeln(i);
writeln(i);
end for;</lang>
end for;</syntaxhighlight>


=={{header|Sidef}}==
=={{header|Sidef}}==
'''for(;;)''' loop:
'''for(;;)''' loop:
<lang ruby>for (var i = 10; i >= 0; i--) {
<syntaxhighlight lang="ruby">for (var i = 10; i >= 0; i--) {
say i
say i
}</lang>
}</syntaxhighlight>


'''for-in''' loop:
'''for-in''' loop:
<lang ruby>for i in (11 ^.. 0) {
<syntaxhighlight lang="ruby">for i in (11 ^.. 0) {
say i
say i
}</lang>
}</syntaxhighlight>


'''.each''' method:
'''.each''' method:
<lang ruby>10.downto(0).each { |i|
<syntaxhighlight lang="ruby">10.downto(0).each { |i|
say i
say i
}</lang>
}</syntaxhighlight>


=={{header|Simula}}==
=={{header|Simula}}==
<lang simula>BEGIN
<syntaxhighlight lang="simula">BEGIN
Integer i;
Integer i;
for i := 10 step -1 until 0 do
for i := 10 step -1 until 0 do
Line 1,924: Line 2,205:
OutImage
OutImage
END
END
END</lang>
END</syntaxhighlight>


=={{header|Slate}}==
=={{header|Slate}}==
<lang slate>10 downTo: 0 do: [| :n | print: n]</lang>
<syntaxhighlight lang="slate">10 downTo: 0 do: [| :n | print: n]</syntaxhighlight>


=={{header|Smalltalk}}==
=={{header|Smalltalk}}==
<lang smalltalk>10 to: 0 by: -1 do:[:aNumber |
<syntaxhighlight lang="smalltalk">10 to: 0 by: -1 do:[:aNumber |
aNumber displayNl.
aNumber displayNl.
].
].
Line 1,936: Line 2,217:
10 downTo: 0 do:[:eachNumber |
10 downTo: 0 do:[:eachNumber |
eachNumber displayNl.
eachNumber displayNl.
]</lang>
]</syntaxhighlight>
Both enumerate 10 to 0 inclusive.
Both enumerate 10 to 0 inclusive.


Non-Smalltalkers might be confused when seeing:
Non-Smalltalkers might be confused when seeing:
<lang smalltalk>(10 to: 0 by: -1) do:[:eachNumber |
<syntaxhighlight lang="smalltalk">(10 to: 0 by: -1) do:[:eachNumber |
eachNumber displayNl.
eachNumber displayNl.
]</lang>
]</syntaxhighlight>
which has the same effect, but a slightly different mechanism.
which has the same effect, but a slightly different mechanism.


Line 1,952: Line 2,233:


The nice thing with Intervals is that they can be concatenated with a <tt>","</tt> operator (like all collections); thus, I could also write:
The nice thing with Intervals is that they can be concatenated with a <tt>","</tt> operator (like all collections); thus, I could also write:
<lang smalltalk>(10 to: 5 by: -1),(0 to: 4) do:[:eachNumber |
<syntaxhighlight lang="smalltalk">(10 to: 5 by: -1),(0 to: 4) do:[:eachNumber |
eachNumber displayNl.
eachNumber displayNl.
]</lang>
]</syntaxhighlight>
to enumerate in a different order,
to enumerate in a different order,
<br>or combine ranges with a constant array:
<br>or combine ranges with a constant array:
<lang smalltalk>(10 to: 0 by: -2),#(99 999),(1 to: 9 by: 2) do:[:each |
<syntaxhighlight lang="smalltalk">(10 to: 0 by: -2),#(99 999),(1 to: 9 by: 2) do:[:each |
each displayNl.
each displayNl.
]</lang>
]</syntaxhighlight>
or with a computed array:
or with a computed array:
<lang smalltalk>(10 to: 0 by: -2),{ 10 factorial . 11 factorial},(1 to: 9 by: 2) do:[:each |
<syntaxhighlight lang="smalltalk">(10 to: 0 by: -2),{ 10 factorial . 11 factorial},(1 to: 9 by: 2) do:[:each |
each displayNl.
each displayNl.
]</lang>
]</syntaxhighlight>


PS: there is also a reverse do, as in:
PS: there is also a reverse do, as in:
<lang smalltalk>(0 to:10) reverseDo:[:each |
<syntaxhighlight lang="smalltalk">(0 to:10) reverseDo:[:each |
each displayNl.
each displayNl.
]</lang>
]</syntaxhighlight>


=={{header|SNOBOL4}}==
=={{header|SNOBOL4}}==
<lang snobol4> COUNT = 10
<syntaxhighlight lang="snobol4"> COUNT = 10
LOOP OUTPUT = COUNT
LOOP OUTPUT = COUNT
COUNT = COUNT - 1
COUNT = COUNT - 1
GE(COUNT, 0) :S(LOOP)
GE(COUNT, 0) :S(LOOP)
END</lang>
END</syntaxhighlight>


=={{header|SNUSP}}==
=={{header|SNUSP}}==
<lang snusp>++++++++++>++++++++++!/- @!\=@\.@@@-@-----# atoi
<syntaxhighlight lang="snusp">++++++++++>++++++++++!/- @!\=@\.@@@-@-----# atoi
\n counter #\?>.</ \ @@@+@+++++# itoa
\n counter #\?>.</ \ @@@+@+++++# itoa
loop</lang>
loop</syntaxhighlight>


=={{header|Sparkling}}==
=={{header|Sparkling}}==
<lang sparkling>for var i = 10; i >= 0; i-- {
<syntaxhighlight lang="sparkling">for var i = 10; i >= 0; i-- {
print(i);
print(i);
}</lang>
}</syntaxhighlight>


=={{header|Spin}}==
=={{header|Spin}}==
Line 1,992: Line 2,273:
{{works with|HomeSpun}}
{{works with|HomeSpun}}
{{works with|OpenSpin}}
{{works with|OpenSpin}}
<lang spin>con
<syntaxhighlight lang="spin">con
_clkmode = xtal1 + pll16x
_clkmode = xtal1 + pll16x
_clkfreq = 80_000_000
_clkfreq = 80_000_000
Line 2,008: Line 2,289:
waitcnt(_clkfreq + cnt)
waitcnt(_clkfreq + cnt)
ser.stop
ser.stop
cogstop(0)</lang>
cogstop(0)</syntaxhighlight>
{{out}}
{{out}}
<pre>10 9 8 7 6 5 4 3 2 1 0</pre>
<pre>10 9 8 7 6 5 4 3 2 1 0</pre>


=={{header|SPL}}==
=={{header|SPL}}==
<lang spl>> i, 10..0,-1
<syntaxhighlight lang="spl">> i, 10..0,-1
#.output(i)
#.output(i)
<</lang>
<</syntaxhighlight>


=={{header|SSEM}}==
=={{header|SSEM}}==
The SSEM can't print, so the results are stored in an array at addresses 22 to 31. Array access is done using self-modifying code: on each iteration we subtract the current value of <tt>n</tt> (stored at address 18) from the illegal instruction <tt>c to 32</tt>, yielding the actual instruction we use to store <tt>n</tt> into the array.
The SSEM can't print, so the results are stored in an array at addresses 22 to 31. Array access is done using self-modifying code: on each iteration we subtract the current value of <tt>n</tt> (stored at address 18) from the illegal instruction <tt>c to 32</tt>, yielding the actual instruction we use to store <tt>n</tt> into the array.
<lang ssem>10001000000000100000000000000000 0. -17 to c
<syntaxhighlight lang="ssem">10001000000000100000000000000000 0. -17 to c
11001000000001100000000000000000 1. c to 19
11001000000001100000000000000000 1. c to 19
11001000000000100000000000000000 2. -19 to c
11001000000000100000000000000000 2. -19 to c
Line 2,037: Line 2,318:
11111111111111111111111111111111 16. -1
11111111111111111111111111111111 16. -1
00000100000001100000000000000000 17. c to 32
00000100000001100000000000000000 17. c to 32
01010000000000000000000000000000 18. 10</lang>
01010000000000000000000000000000 18. 10</syntaxhighlight>


=={{header|Stata}}==
=={{header|Stata}}==
See '''[https://www.stata.com/help.cgi?forvalues forvalues]''' and '''[https://www.stata.com/help.cgi?foreach foreach]''' in Stata help.
See '''[https://www.stata.com/help.cgi?forvalues forvalues]''' and '''[https://www.stata.com/help.cgi?foreach foreach]''' in Stata help.


<lang stata>forvalues n=10(-1)0 {
<syntaxhighlight lang="stata">forvalues n=10(-1)0 {
display `n'
display `n'
}
}
Line 2,052: Line 2,333:
foreach n of numlist 10/0 {
foreach n of numlist 10/0 {
display `n'
display `n'
}</lang>
}</syntaxhighlight>


=={{header|Swift}}==
=={{header|Swift}}==
<lang swift>for i in stride(from: 10, through: 0, by: -1) {
<syntaxhighlight lang="swift">for i in stride(from: 10, through: 0, by: -1) {
println(i)
println(i)
}</lang>
}</syntaxhighlight>
Alternately:
Alternately:
<lang swift>for i in lazy(0...10).reverse() {
<syntaxhighlight lang="swift">for i in lazy(0...10).reverse() {
println(i)
println(i)
}</lang>
}</syntaxhighlight>
In Swift 1.2 Alternately:
In Swift 1.2 Alternately:
<lang swift>for i in reverse(0 ... 10) {
<syntaxhighlight lang="swift">for i in reverse(0 ... 10) {
println(i)
println(i)
}</lang>
}</syntaxhighlight>
Alternately (removed in Swift 3):
Alternately (removed in Swift 3):
<lang swift>for var i = 10; i >= 0; i-- {
<syntaxhighlight lang="swift">for var i = 10; i >= 0; i-- {
println(i)
println(i)
}</lang>
}</syntaxhighlight>
Swift 3:
Swift 3:
<lang swift>for i in (0...10).reversed() {
<syntaxhighlight lang="swift">for i in (0...10).reversed() {
print(i)
print(i)
}</lang>
}</syntaxhighlight>


=={{header|Tailspin}}==
=={{header|Tailspin}}==
Not really a for-loop, but it sends a stream of values where each gets treated the same way.
Not really a for-loop, but it sends a stream of values where each gets treated the same way.
<lang tailspin>
<syntaxhighlight lang="tailspin">
10..0:-1 -> '$;
10..0:-1 -> '$;
' -> !OUT::write
' -> !OUT::write
</syntaxhighlight>
</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==
<lang tcl>for {set i 10} {$i >= 0} {incr i -1} {
<syntaxhighlight lang="tcl">for {set i 10} {$i >= 0} {incr i -1} {
puts $i
puts $i
}
}
# puts "We have liftoff!"</lang>
# puts "We have liftoff!"</syntaxhighlight>


=={{header|Trith}}==
=={{header|Trith}}==
<lang trith>10 inc iota reverse [print] each</lang>
<syntaxhighlight lang="trith">10 inc iota reverse [print] each</syntaxhighlight>
<lang trith>10 [dup print dec] [dup 0 >=] while drop</lang>
<syntaxhighlight lang="trith">10 [dup print dec] [dup 0 >=] while drop</syntaxhighlight>


=={{header|TUSCRIPT}}==
=={{header|TUSCRIPT}}==
<lang tuscript>
<syntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
$$ MODE TUSCRIPT
LOOP n=10,0,-1
LOOP n=10,0,-1
PRINT n
PRINT n
ENDLOOP
ENDLOOP
</syntaxhighlight>
</lang>


=={{header|UNIX Shell}}==
=={{header|UNIX Shell}}==
{{works with|Bourne Shell}}
{{works with|Bourne Shell}}
<lang bash>i=10
<syntaxhighlight lang="bash">i=10
while test $i -ge 0; do
while test $i -ge 0; do
echo $i
echo $i
Line 2,114: Line 2,395:
# or
# or


seq 10 -1 0</lang>
seq 10 -1 0</syntaxhighlight>


----
----
{{works with|bash}}
{{works with|bash}}
<lang bash>for(( Z=10; Z>=0; Z-- )); do
<syntaxhighlight lang="bash">for(( Z=10; Z>=0; Z-- )); do
echo $Z
echo $Z
done
done
Line 2,127: Line 2,408:
echo $Z
echo $Z
done
done
</syntaxhighlight>
</lang>


=={{header|UnixPipes}}==
=={{header|UnixPipes}}==
{{works with|OpenBSD|4.9}}
{{works with|OpenBSD|4.9}}
<lang bash>yes '' | cat -n | head -n 11 | while read n; do
<syntaxhighlight lang="bash">yes '' | cat -n | head -n 11 | while read n; do
expr $n - 1
expr $n - 1
done | tail -r</lang>
done | tail -r</syntaxhighlight>


This pipe uses several nonstandard commands: <code>cat -n</code> and <code>tail -r</code> might not work with some systems.
This pipe uses several nonstandard commands: <code>cat -n</code> and <code>tail -r</code> might not work with some systems.
Line 2,139: Line 2,420:


=={{header|Ursa}}==
=={{header|Ursa}}==
<lang ursa>decl int i
<syntaxhighlight lang="ursa">decl int i
for (set i 10) (> i -1) (dec i)
for (set i 10) (> i -1) (dec i)
out i endl console
out i endl console
end for</lang>
end for</syntaxhighlight>


=={{header|V}}==
=={{header|V}}==
<lang v>10
<syntaxhighlight lang="v">10
[0 >]
[0 >]
[dup puts pred]
[dup puts pred]
while</lang>
while</syntaxhighlight>


=={{header|Vala}}==
=={{header|Vala}}==
<lang vala>for (int i = 10; i >= 0; --i)
<syntaxhighlight lang="vala">for (int i = 10; i >= 0; --i)
stdout.printf("%d\n", i);</lang>
stdout.printf("%d\n", i);</syntaxhighlight>

=={{header|VBA}}==
<lang VB>For i = 10 To 0 Step -1
Debug.Print i
Next i</lang>


=={{header|Vedit macro language}}==
=={{header|Vedit macro language}}==
<lang vedit>for (#1 = 10; #1 >= 0; #1--) {
<syntaxhighlight lang="vedit">for (#1 = 10; #1 >= 0; #1--) {
Num_Type(#1)
Num_Type(#1)
}</lang>
}</syntaxhighlight>


=={{header|Verilog}}==
=={{header|Verilog}}==
<syntaxhighlight lang="verilog">
<lang Verilog>
module main;
module main;
integer i;
integer i;
Line 2,175: Line 2,451:
end
end
endmodule
endmodule
</syntaxhighlight>
</lang>


=={{header|Visual Basic .NET}}==
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">fn main() {
<lang vbnet>For i = 10 To 0 Step -1
Console.WriteLine(i)
Next</lang>

=={{header|Vlang}}==
<lang vlang>fn main() {
for i := 10; i >= 0; i-- {
for i := 10; i >= 0; i-- {
print('$i ')
print('$i ')
}
}
}</lang>
}</syntaxhighlight>


{{out}}
{{out}}
Line 2,195: Line 2,466:


=={{header|Wart}}==
=={{header|Wart}}==
<lang>for i 10 (i >= 0) --i
<syntaxhighlight lang="text">for i 10 (i >= 0) --i
prn i</lang>
prn i</syntaxhighlight>


=={{header|Wren}}==
=={{header|Wren}}==
<lang ecmascript>for (i in 10..0) System.write("%(i) ")
<syntaxhighlight lang="wren">for (i in 10..0) System.write("%(i) ")
System.print()</lang>
System.print()</syntaxhighlight>


{{out}}
{{out}}
Line 2,208: Line 2,479:


=={{header|XPL0}}==
=={{header|XPL0}}==
<lang XPL0>include c:\cxpl\codes; \intrinsic 'code' declarations
<syntaxhighlight lang="xpl0">include c:\cxpl\codes; \intrinsic 'code' declarations
int I;
int I;
for I:= 10 downto 0 do
for I:= 10 downto 0 do
[IntOut(0, I); CrLf(0)]</lang>
[IntOut(0, I); CrLf(0)]</syntaxhighlight>

=={{header|Z80 Assembly}}==
Because of the way looping typically works in hardware, as well as 10 being two digits, it's more efficient to only print numbers 9 through 1 in the loop body, and do the rest outside it.
<syntaxhighlight lang="z80">org &1000

LD A,'1'
CALL &BB5A
LD A,'0'
CALL &BB5A

LD B,9
LD A,'9'

for:
CALL &BB5A
DEC A
DJNZ for

LD A,'0'
JP &BB5A ;its RET returns to BASIC for us.</syntaxhighlight>

{{out}}
<pre>Amstrad Microcomputer (v4)
(c) 1985 Amstrad plc
and Locomotive Software Ltd.
ParaDOS V1.2+ (c)2015 BitWise Systems.

BASIC 1.1
Ready
call &1000
109876543210
Ready</pre>


=={{header|zkl}}==
=={{header|zkl}}==
<lang zkl>foreach n in ([10..0,-1]){ println(n) }
<syntaxhighlight lang="zkl">foreach n in ([10..0,-1]){ println(n) }
[10..0,-1].apply() //-->L(10,9,8,7,6,5,4,3,2,1,0)
[10..0,-1].apply() //-->L(10,9,8,7,6,5,4,3,2,1,0)
// tail recursion
// tail recursion
fcn(n){ n.println(); if(n==0)return(); return(self.fcn(n-1)) }(10)</lang>
fcn(n){ n.println(); if(n==0)return(); return(self.fcn(n-1)) }(10)</syntaxhighlight>


=={{header|Zig}}==
=={{header|Zig}}==
<lang zig>const std = @import("std");
<syntaxhighlight lang="zig">const std = @import("std");


pub fn main() !void {
pub fn main() !void {
Line 2,228: Line 2,531:
try std.io.getStdOut().writer().print("{d}\n", .{i});
try std.io.getStdOut().writer().print("{d}\n", .{i});
}
}
}</lang>
}</syntaxhighlight>

Latest revision as of 18:53, 13 April 2024

Task
Loops/Downward for
You are encouraged to solve this task according to the task description, using any language you may know.
Task

Write a   for   loop which writes a countdown from   10   to   0.


Related tasks



11l

L(i) (10..0).step(-1)
   print(i)

360 Assembly

Use of BXLE and BCT opcodes.

*        Loops/Downward for        27/07/2015
LOOPDOWN CSECT                    
         USING  LOOPDOWN,R12
         LR     R12,R15            set base register
BEGIN    EQU    *
*        fisrt loop with a BXLE    BXLE: Branch on indeX Low or Equal
         LH     R2,=H'11'          from 10 (R2=11) index
         LH     R4,=H'-1'          step -1 (R4=-1)
         LH     R5,=H'-1'          to 0    (R5=-1)
LOOPI    BXLE   R2,R4,ELOOPI       R2=R2+R4 if R2<=R5 goto ELOOPI
         XDECO  R2,BUFFER          edit R2
         XPRNT  BUFFER,L'BUFFER    print    
         B      LOOPI
ELOOPI   EQU    *
*        second loop with a BCT    BCT: Branch on CounT
         LA     R2,10              index   R2=10
         LA     R3,11              counter R3=11
LOOPJ    XDECO  R2,BUFFER          edit R2
         XPRNT  BUFFER,L'BUFFER    print
         BCTR   R2,0               R2=R2-1
ELOOPJ   BCT    R3,LOOPJ           R3=R3-1 if R3<>0 goto LOOPI
RETURN   XR     R15,R15            set return code
         BR     R14                return to caller
BUFFER   DC     CL80' '
         YREGS  
         END    LOOPDOWN

6502 Assembly

Code is called as a subroutine (i.e. JSR Start). Printing routines are only partially coded here, specific OS/hardware routines for printing are left unimplemented.

;An OS/hardware specific routine that is setup to display the Ascii character
;value contained in the Accumulator
Send 		= 	$9000		;routine not implemented here
PrintNewLine	=	$9050		;routine not implemented here

  		*= 	$8000		;set base address 
Start		PHA			;push Accumulator and Y register onto stack
		TYA
		PHA
		LDY 	#10		;set Y register to loop start value
		TYA			;place loop value in the Accumulator 
Loop		JSR	PrintTwoDigits
		JSR   PrintNewLine
		DEY			;decrement loop value
		BPL	Loop		;continue loop if sign flag is clear
		PLA			;pop Y register and Accumulator off of stack
		TAY
		PLA
		RTS			;exit
				
;Print value in Accumulator as two hex digits
PrintTwoDigits
		PHA 
		LSR 
		LSR 
		LSR 
		LSR 
		JSR     PrintDigit
		PLA 
		AND     #$0F
		JSR     PrintDigit
		RTS 
				
;Convert value in Accumulator to an Ascii hex digit
PrintDigit
		ORA	#$30
		JSR	Send		;routine not implemented here
		RTS

68000 Assembly

Code is called as a subroutine, i.e. "JSR ForLoop." OS/Hardware specific printing subroutines are unimplemented here.

ForLoop:
MOVE.W #10,D0
loop:
JSR Print_D0_As_Ascii  ;some routine that converts the digits of D0 into ascii characters and prints them to screen.
DBRA D0,loop           ;repeat until D0.W = $FFFF
rts

8080 Assembly

This assumes the CP/M operating system.

	;-------------------------------------------------------
	; some useful equates
	;-------------------------------------------------------
bdos	equ	5h	; location ofjump to BDOS entry point
wboot   equ     0       ; BDOS warm boot function
conout  equ     2       ; write character to console
	;-------------------------------------------------------
	; main code
	;-------------------------------------------------------
	org	100h
	lxi	sp,stack  ; set up a stack
	;
	lxi	h,10	; starting value for countdown 
loop:	call	putdec	; print it
	mvi	a,' '	; space between numbers
	call	putchr
	dcx	h	; decrease count by 1 
	mov	a,h	; are we done (HL = 0)?
	ora	l
	jnz	loop	; no, so continue with next number
	jmp	wboot	; otherwise exit to operating system
	;-------------------------------------------------------
	; console output of char in A register
	; preserves BC, DE, HL
	;-------------------------------------------------------
putchr:	push	h
	push	d
	push	b
	mov	e,a
	mvi	c,conout
	call	bdos
	pop	b
	pop	d
	pop	h
	ret
	;---------------------------------------------------------
	; Decimal output to console routine
	; HL holds 16-bit unsigned binary number to print
	; Preserves BC, DE, HL
	;---------------------------------------------------------
putdec: push	b
	push	d
	push	h
	lxi	b,-10
	lxi	d,-1
putdec2:
	dad	b
	inx	d
	jc	putdec2
	lxi	b,10
	dad	b
	xchg
	mov	a,h
	ora	l
	cnz	putdec		; recursive call!
	mov	a,e
	adi	'0'		; make printable
	call	putchr
	pop	h
	pop	d
	pop	b
	ret
	;----------------------------------------------------------
	;  data area
	;----------------------------------------------------------
stack	equ	$+128	; 64-level stack to support recursion
	;
	end
Output:
10 9 8 7 6 5 4 3 2 1


8086 Assembly

It is typically much easier for assembly languages to loop downwards than forwards, as they can do so without using a redundant equality check. The 8086's LOOP instruction will loop a section of code, using the CX register as the loop counter.

       .model small ;.exe file, max 128 KB
       .stack 1024  ;reserve 1 KB for the stack pointer.
       
       .data
       
       ;no data needed

       .code
start:
	
	mov ax,0100h	;UNPACKED BCD "10"
	mov cx,0Bh	;loop counter
	
repeat_countdown:
	call PrintBCD_IgnoreLeadingZeroes
	sub ax,1
	aas			
	;ascii adjust for subtraction, normally 0100h - 1 = 0FFh but this corrects it to 0009h
	push ax
		mov dl,13
		mov ah,02h
		int 21h
		
		mov dl,10
		mov ah,02h
		int 21h
		;these 6 lines of code are the "new line" function
	pop ax
	loop repeat_countdown ;decrement CX and jump back to the label "repeat_countdown" if CX != 0
	
	

	mov ax,4C00h
	int 21h			;return to DOS

PrintBCD_IgnoreLeadingZeroes:
	push ax
		cmp ah,0
		jz skipLeadingZero
			or ah,30h         ;convert a binary-coded decimal quantity to an ASCII numeral
			push dx
			push ax
				mov al,ah
				mov ah,0Eh
				int 10h	   ;prints AL to screen
			pop ax
			pop dx
skipLeadingZero:
		or al,30h
		push dx
		push ax
			mov ah,0Eh
			int 10h		   
		pop ax
		pop dx
	pop ax
	ret

        end start ;EOF

AArch64 Assembly

Works with: as version Raspberry Pi 3B version Buster 64 bits
/* ARM assembly AARCH64 Raspberry PI 3B */
/*  program loopdownward64.s   */

/*******************************************/
/* Constantes file                         */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
 
/*********************************/
/* Initialized data              */
/*********************************/
.data
szMessResult:  .asciz "Counter =  @ \n"      // message result

/*********************************/
/* UnInitialized data            */
/*********************************/
.bss 
sZoneConv:              .skip 24
/*********************************/
/*  code section                 */
/*********************************/
.text
.global main 
main:                          // entry of program 
    mov x4,#10
1:                             // begin loop 
    mov x0,x4
    ldr x1,qAdrsZoneConv       // display value
    bl conversion10            // call decimal conversion
    ldr x0,qAdrszMessResult
    ldr x1,qAdrsZoneConv       // display value
    bl strInsertAtCharInc      // insert result at @ character
    bl affichageMess           // display message
    subs x4,x4,1               // decrement counter
    bge 1b                     // loop if greather
 
100:                           // standard end of the program 
    mov x0,0                   // return code
    mov x8,EXIT                // request to exit program
    svc 0                      // perform the system call
 
qAdrsZoneConv:            .quad sZoneConv
qAdrszMessResult:         .quad szMessResult
/********************************************************/
/*        File Include fonctions                        */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"

Ada

for I in reverse 0..10 loop
   Put_Line(Integer'Image(I));
end loop;

Agena

Tested with Agena 2.9.5 Win32

for i from 10 downto 0 do
    print( i )
od

ALGOL 60

Works with: A60

Based on the 1962 Revised Report on ALGOL:

 begin
   integer i;
   for i:=10 step -1 until 0 do 
     outinteger(1,i)
 end
Works with: ALGOL 60 version OS/360
'BEGIN' 'COMMENT' Loops/Downward for - Algol60 - 23/06/2018;
  'INTEGER' I;
  'FOR' I := 10 'STEP' -1 'UNTIL' 0 'DO' 
    OUTINTEGER(1,I)
'END'

ALGOL 68

Works with: ALGOL 68 version Standard - no extensions to language used
Works with: ALGOL 68G version Any - tested with release mk15-0.8b.fc9.i386
Works with: ELLA ALGOL 68 version Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386
FOR i FROM 10 BY -1 TO 0 DO
    print((i,new line))
OD

As a common extension the DOWNTO is sometimes included to optimise the loop termination logic. The DOWNTO is available in Marcel's ALGOL 68G and Cambridge ALGOL 68C.

FOR i FROM 10 DOWNTO 0 DO
    print((i,new line))
OD

ALGOL-M

Sadly, ALGOL-M's FOR statement does not allow a negative value for STEP, so in order to count down we either have to use a WHILE loop or move the subtraction into the body of the FOR loop

begin

integer i;

write("First approach :");
i := 10;
while (i >= 0) do
   begin  
      writeon(i);
      i := i - 1;
   end;

write("Second approach:");
for i := 0 step 1 until 10 do
  writeon(10-i);

end
Output:
First approach :     10      9      8      7      6      5      4      3      2      1      0
Second approach:     10      9      8      7      6      5      4      3      2      1      0

ALGOL W

begin
    for i := 10 step -1 until 0 do
    begin
        write( i )
    end
end.

Amazing Hopper

#include <flow.h>

DEF-MAIN
   CLR-SCR
   SET(i, 10)
   LOOP(ciclo abajo)
      PRNL(i)
   BACK-IF-NOT-ZERO(i--, ciclo abajo)
END
Output:
10
9
8
7
6
5
4
3
2
1
0

AmigaE

PROC main()
  DEF i
  FOR i := 10 TO 0 STEP -1
    WriteF('\d\n', i)
  ENDFOR
ENDPROC

AppleScript

repeat with i from 10 to 0 by -1
  log i
end repeat

ARM Assembly

Works with: as version Raspberry Pi
/* ARM assembly Raspberry PI  */
/*  program loopdownward.s   */

/* Constantes    */
.equ STDOUT, 1     @ Linux output console
.equ EXIT,   1     @ Linux syscall
.equ WRITE,  4     @ Linux syscall

/*********************************/
/* Initialized data              */
/*********************************/
.data
szMessResult:  .ascii "Counter = "      @ message result
sMessValeur:   .fill 12, 1, ' '
                   .asciz "\n"
/*********************************/
/* UnInitialized data            */
/*********************************/
.bss 
/*********************************/
/*  code section                 */
/*********************************/
.text
.global main 
main:                @ entry of program 
    push {fp,lr}      @ saves 2 registers 
    mov r4,#10
1:    @ begin loop 
    mov r0,r4
    ldr r1,iAdrsMessValeur     @ display value
    bl conversion10             @ call function with 2 parameter (r0,r1)
    ldr r0,iAdrszMessResult
    bl affichageMess            @ display message
    subs r4,#1                   @ decrement counter
    bge 1b                      @ loop if greather

100:   @ standard end of the program 
    mov r0, #0                  @ return code
    pop {fp,lr}                 @restaur 2 registers
    mov r7, #EXIT              @ request to exit program
    svc #0                       @ perform the system call

iAdrsMessValeur:          .int sMessValeur
iAdrszMessResult:         .int szMessResult
/******************************************************************/
/*     display text with size calculation                         */ 
/******************************************************************/
/* r0 contains the address of the message */
affichageMess:
    push {r0,r1,r2,r7,lr}      @ save  registres
    mov r2,#0                  @ counter length 
1:      @ loop length calculation 
    ldrb r1,[r0,r2]           @ read octet start position + index 
    cmp r1,#0                  @ if 0 its over 
    addne r2,r2,#1            @ else add 1 in the length 
    bne 1b                    @ and loop 
                                @ so here r2 contains the length of the message 
    mov r1,r0        			@ address message in r1 
    mov r0,#STDOUT      		@ code to write to the standard output Linux 
    mov r7, #WRITE             @ code call system "write" 
    svc #0                      @ call systeme 
    pop {r0,r1,r2,r7,lr}        @ restaur des  2 registres */ 
    bx lr                       @ return  
/******************************************************************/
/*     Converting a register to a decimal                                 */ 
/******************************************************************/
/* r0 contains value and r1 address area   */
conversion10:
    push {r1-r4,lr}    @ save registers 
    mov r3,r1
    mov r2,#10

1:	   @ start loop
    bl divisionpar10 @ r0 <- dividende. quotient ->r0 reste -> r1
    add r1,#48        @ digit	
    strb r1,[r3,r2]  @ store digit on area
    sub r2,#1         @ previous position
    cmp r0,#0         @ stop if quotient = 0 */
    bne 1b	          @ else loop
    @ and move spaces in first on area
    mov r1,#' '   @ space	
2:	
    strb r1,[r3,r2]  @ store space in area
    subs r2,#1       @ @ previous position
    bge 2b           @ loop if r2 >= zéro 

100:	
    pop {r1-r4,lr}    @ restaur registres 
    bx lr	          @return
/***************************************************/
/*   division par 10   signé                       */
/* Thanks to http://thinkingeek.com/arm-assembler-raspberry-pi/*  
/* and   http://www.hackersdelight.org/            */
/***************************************************/
/* r0 dividende   */
/* r0 quotient */	
/* r1 remainder  */
divisionpar10:	
  /* r0 contains the argument to be divided by 10 */
    push {r2-r4}   /* save registers  */
    mov r4,r0 
    mov r3,#0x6667   @ r3 <- magic_number  lower
    movt r3,#0x6666  @ r3 <- magic_number  upper
    smull r1, r2, r3, r0   @ r1 <- Lower32Bits(r1*r0). r2 <- Upper32Bits(r1*r0) 
    mov r2, r2, ASR #2     /* r2 <- r2 >> 2 */
    mov r1, r0, LSR #31    /* r1 <- r0 >> 31 */
    add r0, r2, r1         /* r0 <- r2 + r1 */
    add r2,r0,r0, lsl #2   /* r2 <- r0 * 5 */
    sub r1,r4,r2, lsl #1   /* r1 <- r4 - (r2 * 2)  = r4 - (r0 * 10) */
    pop {r2-r4}
    bx lr                  /* leave function */

Arturo

loop 10..0 'i [
	print i
]
Output:
10
9
8
7
6
5
4
3
2
1
0

Asymptote

Asymptote's control structures are similar to those in C, C++, or Java

for(int i = 10; i >=0; --i) {
    write(i);
}

AutoHotkey

x := 10
While (x >= 0)
{
  output .= "`n" . x
  x--
}
MsgBox % output

Avail

For each i from 10 to 0 by -1 do [Print: “i” ++ "\n";];

Note that 10 to 0 by -1 section isn't a fixed part of the loop syntax, but a call to the _to_by_ method, which returns a tuple of integers in a range separated by a particular step size, in this case returning <10, 9, 8, 7, 6, 5, 4, 3, 2, 1>.

AWK

BEGIN {
  for(i=10; i>=0; i--) {
     print i
  }
}

Axe

Axe does not support for loops with step sizes other than 1.

For(I,0,10)
 Disp 10-I▶Dec,i
End

Bait

fun main() {
	for i := 10; i >= 0; i -= 1 {
		println(i)
	}
}

BASIC

Applesoft BASIC

FOR I = 10 TO 0 STEP -1 : PRINT I : NEXT I

BaCon

' Downward for
FOR i = 10 DOWNTO 0 : PRINT i : NEXT

BASIC256

Works with: QBasic
for i = 10 to 0 step -1
	print i; " ";
next i
print
end

BBC BASIC

      FOR i% = 10 TO 0 STEP -1
        PRINT i%
      NEXT

Commodore BASIC

10 FOR I = 10 TO 0 STEP -1
20 PRINT I 
30 NEXT

Chipmunk Basic

The GW-BASIC solution works without any changes.

FBSL

#APPTYPE CONSOLE

FOR DIM i = 10 DOWNTO 0
    PRINT i
NEXT

PAUSE

FreeBASIC

' FB 1.05.0 Win64

For i As Integer = 10 To 0 Step -1
  Print i; " ";
Next
Print 
Sleep
Output:
 10  9  8  7  6  5  4  3  2  1  0

FutureBasic

window 1, @"Countdown", ( 0, 0, 400, 300 )

NSInteger i

for i = 10 to 0 step -1
print i
next

HandleEvents

Output:

 10
 9
 8
 7
 6
 5
 4
 3
 2
 1
 0

Gambas

Click this link to run this code

Public Sub Main()
Dim siCount As Short

For siCount = 10 DownTo 0
  Print siCount;;
Next

End

Output:

10 9 8 7 6 5 4 3 2 1 0

GW-BASIC

Works with: BASICA
Works with: PC-BASIC version any
10 FOR I% = 10 TO 0 STEP -1
20  PRINT I%
30 NEXT I%

IS-BASIC

100 FOR I=10 TO 0 STEP-1
110   PRINT I
120 NEXT

Liberty BASIC

Works with: Just BASIC
Works with: Run BASIC
for i = 10 to 0 step -1
   print i
next i
end

Microsoft Small Basic

For i = 10 To 0 Step -1
  TextWindow.WriteLine(i)
EndFor

MSX Basic

The GW-BASIC solution works without any changes.

NS-HUBASIC

10 FOR 1=10 TO 0 STEP -1
20 PRINT I
30 NEXT

PureBasic

For i=10 To 0 Step -1
  Debug i
Next

QB64

CBTJD: 2020/03/14

FOR n = 10 TO 0 STEP -1
    PRINT n
NEXT

QuickBASIC

for i = 10 to 0 step -1
   print i
next i

Quite BASIC

The GW-BASIC solution works without any changes.

Run BASIC

Works with: Just BASIC
Works with: Liberty BASIC
for i = 10 to 0 step -1
   print i
next i
end

TI-83 BASIC

:For(I,10,0,-1
:Disp I
:End

TI-89 BASIC

Local i
For i, 10, 0, –1
  Disp i
EndFor

True BASIC

Works with: QBasic
FOR i = 10 TO 0 STEP -1
    PRINT i; " ";
NEXT i
PRINT
END

Tiny BASIC

Works with: TinyBasic
10 REM Loops/Downward for
20 LET I = 10
30 IF I = -1 THEN END
40 PRINT I
50 LET I = I - 1
60 GOTO 30
70 END

VBA

For i = 10 To 0 Step -1
   Debug.Print i
Next i

Visual Basic .NET

For i = 10 To 0 Step -1
    Console.WriteLine(i)
Next

XBasic

Works with: Windows XBasic
PROGRAM "downwardfor"

DECLARE FUNCTION Entry()

FUNCTION Entry()
  FOR i% = 10 TO 0 STEP -1
    PRINT i%
  NEXT i%
END FUNCTION
END PROGRAM

Yabasic

Works with: QBasic
for i = 10 to 0 step -1
    print i, " ";
next i
print
end

ZX Spectrum Basic

10 FOR l = 10 TO 0 STEP -1
20 PRINT l
30 NEXT l

Batch File

@echo off
for /l %%D in (10,-1,0) do echo %%D

bc

for (i = 10; i >= 0; i--) i
quit

Befunge

55+>:.:v
@  ^ -1_

BQN

Each (¨) is an operator in BQN that helps with emulating loops like for and foreach.

•Show¨⌽↕11

Bracmat

  10:?i
& whl'(out$!i&!i+-1:~<0:?i)

Brainf***

>++++++++[-<++++++>]    //cell 0 now contains 48 the ASCII code for "0"
<+.-.                   //print the digits 1 and 0
>++++++++++.            //cell 1 now contains the carriage return; print it!
>+++++++++              //cell 2 now contains the number 9; this is our counter
<<+++++++++>>           //cell 0 now contains 57 the ASCII code for "9"
[<<.->.>-]              //print and decrement the display digit; print a newline; decrement the loop variable
<<.>.                   //print the final 0 and a final newline

Brat

10.to 0 { n | p n }

C

int i;
for(i = 10; i >= 0; --i)
  printf("%d\n",i);

C#

for (int i = 10; i >= 0; i--)
{
   Console.WriteLine(i);
}

C++

for(int i = 10; i >= 0; --i)
  std::cout << i << "\n";

C3

for (int i = 10; i >= 0; i--)
{
  io::printn(i);
}

Ceylon

for (i in 10..0) {
    print(i);
}

Chapel

for i in 1..10 by -1 do
	writeln(i);

In case you wonder why it is not written as 10..1 by -1: by is an operator that works on ranges, and it should work the same when the range was defined earlier, like in

var r = 1..10;
for i in r by -1 do { ... }

Clipper

   FOR i := 10 TO 0 STEP -1
      ? i
   NEXT

Clojure

(doseq [x (range 10 -1 -1)] (println x))

COBOL

free-form

identification division.
program-id. countdown.
environment division.
data division.
working-storage section.
01	counter 		pic 99.
	88	counter-done	value 0.
01	counter-disp	pic Z9.
procedure division.
	perform with test after varying counter from 10 by -1 until counter-done
		move counter to counter-disp
		display counter-disp
	end-perform
	stop run.
Output:
10
 9
 8
 7
 6
 5
 4
 3
 2
 1
 0

CoffeeScript

This could be written either in the array comprehension style, or in "regular" for loop style.

# The more compact "array comprehension" style
console.log i for i in [10..0]

# The "regular" for loop style.
for i in [10..0]
	console.log i

# More compact version of the above
for i in [10..0] then console.log i
10
9
8
7
6
5
4
3
2
1
0

(the output is repeated three times; once for each loop)

ColdFusion

With tags:

<cfloop index = "i" from = "10" to = "0" step = "-1">
  #i#
</cfloop>

With script:

<cfscript>
  for( i = 10; i <= 0; i-- )
  {
    writeOutput( i );
  }
</cfscript>

Common Lisp

(loop for i from 10 downto 1 do
  (print i))

Using DO

(do ((n 10 (decf n)))			; Initialize to 0 and downward in every loop
    ((< n 0))				; Break condition when negative
  (print n))				; On every loop print value

Using Tagbody and Go

(let ((count 10))                ; Create local variable count = 10
  (tagbody
   dec                           ; Create tag dec
    (print count)                ; Prints count
    (decf count)                 ; Decreases count
    (if (not (< count 0))        ; Ends loop when negative
        (go dec))))              ; Loops back to tag dec

Using Recursion

(defun down-to-0 (count)
  (print count)
  (if (not (zerop count))
      (down-to-0 (1- count))))
(down-to-0 10)
Output:
10 
9 
8 
7 
6 
5 
4 
3 
2 
1 
0 

Computer/zero Assembly

LDA 28
SUB 29
STA 31
STA 28
BRZ 6 ;branch on zero to STP
JMP 0
STP
...
org 28
byte 11
byte 1
byte 0
Output:

Emulator with program loaded

Crystal

10.step(to: 0, by: -1).each { |i|
    puts i
}

D

import std.stdio: writeln;

void main() {
    for (int i = 10; i >= 0; --i)
        writeln(i);
    writeln();

    foreach_reverse (i ; 0 .. 10 + 1)
        writeln(i);
}
Output:
10
9
8
7
6
5
4
3
2
1
0

10
9
8
7
6
5
4
3
2
1
0

Dart

void main() {
  for (var i = 10; i >= 0; --i) {
    print(i);
  }
}

dc

does not use GNU extensions

[]s. is a comment

c clears the stack

[~...]p s. to print strings

l<register>x executes the macro

uses the macro f - [p] to print, this can be replaced by any complex expressions.

c

[macro s(swap) - (a b : b a)]s.
[Sa Sb La Lb] ss

[macro d(2dup) - (a b : a b a b)]s.
[Sa d Sb La d Lb lsx] sd

[macro m(for) - ]s.
[lfx 1 - ldx !<m ] sm

0 10 ldx [p] sf !<m
q

Using it

|dc < ./for.dc
10
9
...
0

Delphi

See Pascal

Draco

proc nonrec main() void:
    byte i;
    for i from 10 downto 0 do
        write(i," ")
    od
corp
Output:
10 9 8 7 6 5 4 3 2 1 0

DWScript

for i := 10 downto 0 do
  PrintLn(i);

E

for i in (0..10).descending() { println(i) }

EasyLang

for i = 10 downto 0
  print i
.

EchoLisp

(for ((longtemps-je-me-suis-couché-de-bonne-heure (in-range 10 -1 -1)))
     (write longtemps-je-me-suis-couché-de-bonne-heure))
     10 9 8 7 6 5 4 3 2 1 0

EDSAC order code

Including a full routine to print integers in decimal would probably be overkill; at least, it would obscure what is essentially a simple program. We therefore cheat slightly by printing "10\r\n" manually, and using the loop only to print "9\r\n" down to "0\r\n". Note that character codes are stored in the high 5 bits of the 17-bit EDSAC word: so we actually count down from 36,864 to 0 in steps of 4,096.

[ Loop with downward counter
  ==========================

  A program for the EDSAC

  Prints the integers 10 down to 0

  The counter is stored at address 20@

  Its initial value is 9 * 2^12
  (9 in the high 5 bits, representing
  the character '9') and it counts
  down in steps of 2^12

  Works with Initial Orders 2 ]

        T56K    [ set load point ]
        GK      [ set base address ]

[ orders ]

        O14@    [ print figure shift ]
        O15@    [ print '1' ]
        O16@    [ print '0' ]
        O17@    [ print CR ]
        O18@    [ print LF ]

[ 5 ]   O20@    [ print c ]
        O17@    [ print CR ]
        O18@    [ print LF ]

        T19@    [ acc := 0 ]
        A20@    [ acc += c ]
        S15@    [ acc -:= character '1' ]
        U20@    [ c := acc ]

        E5@     [ branch on non-negative ]

        ZF      [ stop ]

[ constants ]

[ 14 ]  #F      [ πF -- figure shift ]
[ 15 ]  QF      [ character '1' ]
[ 16 ]  PF      [ character '0' ]
[ 17 ]  @F      [ θF -- CR ]
[ 18 ]  &F      [ ΔF -- LF ]

[ variables ]

[ 19 ]  P0F     [ used to clear acc ]
[ 20 ]  OF      [ character c = '9' ]

        EZPF    [ start when loaded ]

EGL

for ( i int from 10 to 0 decrement by 1 )
   SysLib.writeStdout( i );
end

Ela

Standard Approach

open monad io

each [] = do return ()
each (x::xs) = do
  putStrLn $ show x
  each xs

each [10,9..0] ::: IO

Alternative Approach

open monad io

countDown m n | n < m = do return ()
              | else = do
                  putStrLn $ show n
                  countDown m (n - 1)

_ = countDown 0 10 ::: IO

Elixir

iex(1)> Enum.each(10..0, fn i -> IO.puts i end)
10
9
8
7
6
5
4
3
2
1
0
:ok

Erlang

%% Implemented by Arjun Sunel
-module(downward_loop).
-export([main/0]).
 
main() ->
	for_loop(10).    
 
 for_loop(N) ->
 	if N > 0 ->
		io:format("~p~n",[N] ),
		for_loop(N-1);
	true ->
		io:format("~p~n",[N])
	end.
Output:
10
9
8
7
6
5
4
3
2
1
0
ok

ERRE

   FOR I%=10 TO 0 STEP -1 DO
     PRINT(I%)
   END FOR

Euphoria

for i = 10 to 0 by -1 do
    ? i
end for

F#

Using an enumerable expression:

for i in 10..-1..0 do
  printfn "%d" i

Using the 'downto' keyword:

for i = 10 downto 0 do
  printfn "%d" i

Factor

11 <iota> <reversed> [ . ] each

FALSE

10[$0>][$." "1-]#.

Fantom

class DownwardFor
{
  public static Void main ()
  {
    for (Int i := 10; i >= 0; i--)
    {
      echo (i)
    }
  }
}

Fermat

for i = 10 to 0 by -1 do !!i; od

Forth

Unlike the incrementing 10 0 DO-LOOP, this will print eleven numbers. The LOOP words detect crossing the floor of the end limit.

: loop-down  0 10 do  i .  -1 +loop ;

Fortran

Works with: Fortran version 90 and later
DO i = 10, 0, -1
  WRITE(*, *) i
END DO
Works with: Fortran version 77 and later
      PROGRAM DOWNWARDFOR
C Initialize the loop parameters.
        INTEGER I, START, FINISH, STEP
        PARAMETER (START = 10, FINISH = 0, STEP = -1)

C If you were to leave off STEP, it would default to positive one.
        DO 10 I = START, FINISH, STEP
          WRITE (*,*) I
   10   CONTINUE

        STOP
      END

Frink

for i = 10 to 0 step -1
   println[i]

GAP

for i in [10, 9 .. 0] do
    Print(i, "\n");
od;

GML

for(i = 10; i >= 0; i -= 1)
    show_message(string(i))

Go

for i := 10; i >= 0; i-- {
  fmt.Println(i)
}
package main

import "fmt"
import "time"

func main() {
	i := 10
	for i > 0 {
		fmt.Println(i)
		time.Sleep(time.Second)
		i = i - 1
	}
	fmt.Println("blast off")
}

Groovy

for (i in (10..0)) {
    println i
}

Harbour

FOR i := 10 TO 0 STEP -1
   ? i
NEXT

Haskell

import Control.Monad

main :: IO ()
main = forM_ [10,9 .. 0] print

Haxe

Haxe lacks a downward for-loop, but it is easy to create an iterator to serve that purpose.

class Step {
  var end:Int;
  var step:Int;
  var index:Int;

  public inline function new(start:Int, end:Int, step:Int) {
    this.index = start;
    this.end = end;
    this.step = step;
  }

  public inline function hasNext() return step > 0 ? end >= index : index >= end;
  public inline function next() return (index += step) - step;
}

class Main {
  static function main() {
    for (i in new Step(10, 0, -1)) {
      Sys.print('$i ');
    }
  }
}
Output:
10 9 8 7 6 5 4 3 2 1 0

hexiscript

for let i 10; i >= 0; i--
  println i
endfor

HicEst

DO i = 10, 0, -1
  WRITE() i
ENDDO

HolyC

I8 i;
for (i = 10; i >= 0; --i)
  Print("%d\n", i);

Icon and Unicon

There are four looping controls 'every', 'repeat', 'until', and 'while' (see Introduction to Icon and Unicon/Looping Controls for more information.) The closest to a 'for' loop is 'every'.

every i := 10 to 0 by -1 do {
   # things to do within the loop
   }

IDL

Using a loop (with an "increment of minus one" ):

for i=10,0,-1 do print,i

But in IDL one would rarely use loops (for anything) since practically everything can be done with vectors/arrays.

The "IDL way of doing things" for the countdown requested in the task would probably be this:

print,10-indgen(11)

Inform 6

for(i = 10: i >= 0: i--)
    print i, "^";

Io

for(i,10,0,-1,
    i println
)

J

J is array-oriented, so there is very little need for loops. For example, one could satisfy this task this way:

   ,. i. -11
10
 9
 8
 7
 6
 5
 4
 3
 2
 1
 0

J does support loops for those times they can't be avoided (just like many languages support gotos for those time they can't be avoided).

3 : 0 ] 11
  for_i. i. - y do.
    smoutput i
  end.
)

Though it's rare to see J code like this.

That said, a convenient routine for generating intervals in J might be:

thru=: <. + i.@(+*)@-~

For example:

   10 thru 0
10 9 8 7 6 5 4 3 2 1 0

(or ,.10 thru 0 if you want each number on a line by itself)

This verb "thru" will count up or down, starting and stop at the indicated left and right ending points. (However, note that this particular implementation of 'thru' will return an empty result if the starting and ending values are the same. Whether that's useful or a problem, depends on the application.)

Java

for (int i = 10; i >= 0; i--) {
    System.out.println(i);
}

JavaScript

for (var i=10; i>=0; --i) print(i);

Alternatively, remaining for the moment within an imperative idiom of JavaScript, in which programs are composed of statements, we could trim the computational costs over longer reversed iterations by moving the mutation into the test, and dropping the third term of a for() statement:

for (var i = 11; i--;) console.log(i);

and it sometimes might be more natural, especially at scales at which optimisation becomes an issue, to go one step further and express the same computation with the more economical while statement.

var i = 11;
while (i--) console.log(i);

In a functional idiom of JavaScript, however, we need an expression with a value (which can be composed within superordinate expressions), rather than a statement, which produces a side-effect but returns no information-bearing value.

If we have grown over-attached to the English morpheme 'for', we might think first of turning to Array.forEach(), and write something like:

function range(m, n) {
  return Array.apply(null, Array(n - m + 1)).map(
    function (x, i) {
      return m + i;
    }
  );
}

range(0, 10).reverse().forEach(
  function (x) {
    console.log(x);
  }
);


but this is still a statement with side-effects, rather than a composable expression with a value.

We can get an expression (assuming that the range() function (above) is defined) but replacing Array.forEach with Array.map()

console.log(
  range(0, 10).reverse().map(
    function (x) {
      return x;
    }
  ).join('\n')
);

but in this case, we are simply mapping an identity function over the values, so the expression simplifies down to:

console.log(
    range(0, 10).reverse().join('\n')
);

jq

If range/3 is available in your jq:

range(10;-1;-1)

Otherwise:

range(-10;1) | -.

Julia

for i in 10:-1:0
    println(i)
end

Kotlin

// version 1.3.61

fun main() {
    (10 downTo 0).forEach { println(it) }
}

Lambdatalk

{def downward_for
 {lambda {:i}
   {if {< :i 0}
    then (end of loop)
    else :i {downward_for {- :i 1}}}}}
-> downward_for

{downward_for 10}
-> 10 9 8 7 6 5 4 3 2 1 0 (end of loop)

langur

for .i in 10..0 {
    writeln .i
}
for .i = 10; .i > -1; .i -= 1 {
    writeln .i
}

Lasso

loop(-from=10, -to=0, -by=-1) => {^ loop_count + ' ' ^}

LDPL

data:
i is number

procedure:
for i from 10 to -1 step -1 do
    display i lf
repeat

Lhogho

Slightly different syntax for for compared to Logo.

for "i [10 0] [print :i]

Lingo

repeat with i = 10 down to 0
  put i
end repeat

Lisaac

10.downto 0 do { i : INTEGER;
  i.println;
  
};

LiveCode

Livecode's repeat "for" variant does not have a "down to" form, in a function you would need to manually decrement a counter

local x=10
repeat for 10 times                                                                                                   
  put x & return                                                                                                        
  add -1 to x                                                                                                           
end repeat

A more idiomatic approach using "with" variant of repeat which does have a "down to" form

repeat with n=10 down to 1
  put n
end repeat

If the limit is less than the start, then FOR decrements the control variable. Otherwise, a fourth parameter could be given as a custom increment.

for [i 10 0] [print :i]

Lua

for i=10,0,-1 do
  print(i)
end

M2000 Interpreter

M2000 can operate a For like in BASIC or Like M2000. In M2000 mode, a For always execute at least one time the block inside. This FOR use absolute value of step, except when we have start value and end value the same value, so from sign of step, interpreter calculate the exit value.

We can change the iterator variable of a For, but this variable is a copy of actual iterator, and next step get the proper value. So we can't change the numbers of steps, but we can use continue to skip rest of code and execute next step, or exit to exit block and stop loop. Also we can use Goto to stop loop and continue from a label.

There is a slower For, the For Next style:

For i=1 to 10 step 2 : Print i : Next i

We have to use Exit For to exit from that type of For.

This is not an error (each for has private counter value):

for i=1 to 10 :for i=1 to 2:Print i:Next i:Next i

We get 10 times two values: 1 2


Form 80, 50
Module Checkit {
      set switches "+For"
      For i=10 to 1 step -1 {
            Print i
      }
      Print i=0
      \\ this For switch make it like For in BASIC
      \\ block skipped
      For i=1 to 10 step -1 {
            Print i
      }
      print i=1
      \\ but this is the default behavior
      \\
      set switches "-For"
      \\ sign of step used when start is same as end to calculate the exit value of i
      \\ This is the standard, and a For always execute at least one time the block.
      \\ use absulute step_Value. Because 10>1 direction is downward.
      For i=10 to 1 step -1 {
            Print i
      }
      Print i=0
      \\  loop from 1 to 10, using abs(step_value)
      For i=1 to 10 step -1 {
            Print i
      }
      print i=11
      For i=1 to 1 step -1 {
            Print i
      }
      Print i=0
}
CheckIt

M4

define(`for',
   `ifelse($#,0,``$0'',
   `ifelse(eval($2 $3),1,
   `pushdef(`$1',$2)$5`'popdef(`$1')$0(`$1',eval($2+$4),$3,$4,`$5')')')')dnl

for(`x',`10',`>=0',`-1',`x
')

Maple

Using an explicit loop:

for i from 10 to 0 by -1 do print(i) end:

Pushing the loop into the kernel:

seq(print(i),i=10..0,-1)

Mathematica/Wolfram Language

Mathematica provides several ways to iterate over a range of numbers, small subtle differences are amongst them. 3 possible implementations are (exactly the same output):

Using For:

For[i = 10, i >= 0, i--, Print[i]]

Using Do:

Do[Print[i], {i, 10, 0, -1}]

Using Scan:

Scan[Print, Range[10, 0, -1]]

MATLAB / Octave

    for k = 10:-1:0,
        printf('%d\n',k)
    end;

A vectorized version of the code is

  printf('%d\n',10:-1:0);

Maxima

for i from 10 thru 0 step -1 do print(i);

MAXScript

for i in 10 to 0 by -1 do print i

Mercury

:- module loops_downward_for.
:- interface.

:- import_module io.
:- pred main(io::di, io::uo) is det.

:- implementation.
:- import_module int.

main(!IO) :-
   Print = (pred(I::in, !.IO::di, !:IO::uo) is det :-
       io.write_int(I, !IO), io.nl(!IO)
   ),
   int.fold_down(Print, 1, 10, !IO).

Metafont

for i = 10 step -1 until 0: show i; endfor
end

The basic set of macros for Metafont defines downto, so that we can write

for i = 10 downto 0: show i; endfor end

min

Works with: min version 0.19.6
10 :n (n 0 >=) (n puts! n pred @n) while

Or

10 (dup 0 <) 'pop (puts pred) () linrec

MiniScript

for i in range(10, 0)
    print i
end for

МК-61/52

1	0	П0	ИП0	L0	03	С/П

Modula-2

MODULE Downward;
  IMPORT InOut;

  VAR
    i: INTEGER;

BEGIN
  FOR i := 10 TO 0 BY -1 DO
    InOut.WriteInt(i, 2);
    InOut.WriteLn
  END
END Downward.

Modula-3

FOR i := 10 TO 0 BY -1 DO
  IO.PutInt(i);
END;

MUMPS

LOOPDOWN
 NEW I FOR I=10:-1:1 WRITE I WRITE:I'=1 ", "
 KILL I QUIT

N/t/roff

.nr a 11 1
.while (\na > 0) \{\
\n-a
.\}
Output:
10 9 8 7 6 5 4 3 2 1 0

Nemerle

for (i = 10; i >= 0; i--) {WriteLine($"$i")}
foreach (i in [10, 9 .. 0]) {WriteLine($"$i")}

NetRexx

/* NetRexx */
options replace format comments java crossref savelog symbols nobinary

  say
  say 'Loops/Downward for'

  loop i_ = 10 to 0 by -1
    say i_.right(2)
    end i_

NewLISP

(for (i 10 0)
  (println i))

Nim

for x in countdown(10,0): echo(x)
Output:
10
9
8
7
6
5
4
3
2
1
0

Nu

for i in 10..0 {print $i}

Oberon-2

FOR i := 10 TO 0 BY -1 DO
  Out.Int(i,0);
END;

Objeck

for(i := 10; i >= 0; i--;) {
   i->PrintLine();
};

OCaml

for i = 10 downto 0 do
  Printf.printf "%d\n" i
done

Octave

for i = 10:-1:0
  % ...
endfor

Oforth

10 0 -1 step: i [ i println ]

Oz

for I in 10..0;~1 do
   {Show I}
end

PARI/GP

forstep(n=10,0,-1,print(n))

Pascal

for i := 10 downto 0 do
  writeln(i);

Peloton

English fixed-length opcodes

<@ ITEFORLITLITLITLIT>0|<@ SAYVALFOR>...</@>|10|-1</@>

Simplified Chinese variable-length opcodes

<# 迭代迭代次数字串字串字串字串>0|<# 显示值迭代次数>...</#>|10|-1</#>

Perl

foreach (reverse 0..10) {
  print "$_\n";
}

Phix

Library: Phix/basics
for i=10 to 0 by -1 do
    ?i
end for

Phixmonti

/# Rosetta Code problem: https://rosettacode.org/wiki/Loops/Downward_for
by Galileo, 11/2022 #/

include ..\Utilitys.pmt

( 10 0 -1 ) for ? endfor

PHP

for ($i = 10; $i >= 0; $i--)
  echo "$i\n";

or

foreach (range(10, 0) as $i)
  echo "$i\n";

PicoLisp

(for (I 10 (ge0 I) (dec I))
   (println I) )

or:

(mapc println (range 10 0))

Pike

int main(){
   for(int i = 10; i >= 0; i--){
      write(i + "\n");
   }
}

PL/0

var i;
begin
  i := 10;
  while i > -1 do
  begin
    ! i;
    i := i - 1
  end
end.

PL/I

do i = 10 to 0 by -1;
   put skip list (i);
end;

Plain English

One way might be:

To run:
Start up.
Put 11 into a counter.
Loop.
If the counter is below 0, break.
Convert the counter to a string.
Write the string on the console.
Repeat.
Wait for the escape key.
Shut down.

To decide if a counter is below a number:
Subtract 1 from the counter.
If the counter is less than the number, say yes.
Say no.

Pop11

lvars i;
for i from 10 by -1 to 0 do
   printf(i, '%p\n');
endfor;

PowerShell

for ($i = 10; $i -ge 0; $i--) {
    $i
}

Alternatively, the range operator might be used as well which simply returns a contiguous range of integers:

10..0

Prolog

Although Prolog has a between(Lo,Hi,Value) iterator, there is no built in equivalent for iterating descending values. This is not a show stopper, as it's easy enough to write one.

rfor(Hi,Lo,Hi) :- Hi >= Lo.
rfor(Hi,Lo,Val) :- Hi > Lo, H is Hi - 1, !, rfor(H,Lo,Val).

reverse_iter :-
  rfor(10,0,Val), write(Val), nl, fail.
reverse_iter.
?- reverse_iter.
10
9
8
7
6
5
4
3
2
1
0
true.

Python

for i in xrange(10, -1, -1):
    print i

List comprehension

[i for i in xrange(10, -1, -1)]
import pprint
pprint.pprint([i for i in xrange(10, -1, -1)])

Quackery

11 times [ i echo sp ]
Output:
10 9 8 7 6 5 4 3 2 1 0

R

for(i in 10:0) {print(i)}

Racket

#lang racket

(for ([i (in-range 10 -1 -1)])
  (displayln i))

Raku

(formerly Perl 6)

Works with: Rakudo Star version 2010.08
for 10 ... 0 {
    .say;
}

REBOL

for i 10 0 -1 [print i]

Retro

11 [ putn space ] iterd

REXX

version 1

(equivalent to version 2 and version 3)

  do j=10  to 0  by -1
  say j
  end

version 2

(equivalent to version 1 and version 3)

  do j=10  by -1  to 0
  say j
  end

version 3

(equivalent to version 1 and version 2)

Anybody who programs like this should be hunted down and shot like dogs!

Hurrumph! Hurrumph!

  do j=10  by -2  to 0
  say j
  j=j+1     /*this increments the  DO  index.   Do NOT program like this! */
  end

version 4

This example isn't compliant to the task, but it shows that the increment/decrement can be a non-integer:

  do j=30  to 1  by -.25
  say j
  end

Ring

count from 10 to 0 by -1 step:

for i = 10 to 0 step -1 see i + nl next

RPL

≪ 10 1 FOR n 
      n 
   -1 STEP

Ruby

10.downto(0) do |i|
   puts i
end

Rust

fn main() {
    for i in (0..=10).rev() {
        println!("{}", i);
    }
}

Salmon

for (x; 10; x >= 0; -1)
    x!;

Sather

class MAIN is
  main is
    i:INT;
    loop i := 10.downto!(0);
       #OUT  + i + "\n";
    end;
  end;
end;

S-BASIC

var i = integer
for i = 10 to 1 step -1
  print i;
next i

end
Output:
 10 9 8 7 6 5 4 3 2 1

Scala

for(i <- 10 to 0 by -1) println(i)
//or
10 to 0 by -1 foreach println

Scheme

(do ((i 10 (- i 1)))
    ((< i 0))
    (display i)
    (newline))

Scilab

Works with: Scilab version 5.5.1
for i=10:-1:0
    printf("%d\n",i)
end
Output:
10
9
8
7
6
5
4
3
2
1
0

Seed7

for i range 10 downto 0 do
  writeln(i);
end for;

Sidef

for(;;) loop:

for (var i = 10; i >= 0; i--) {
    say i
}

for-in loop:

for i in (11 ^.. 0) {
    say i
}

.each method:

10.downto(0).each { |i|
    say i
}

Simula

BEGIN
    Integer i;
    for i := 10 step -1 until 0 do
    BEGIN
        OutInt(i, 2);
        OutImage
    END
END

Slate

10 downTo: 0 do: [| :n | print: n]

Smalltalk

10 to: 0 by: -1 do:[:aNumber | 
  aNumber displayNl.
].

10 downTo: 0 do:[:eachNumber | 
  eachNumber displayNl.
]

Both enumerate 10 to 0 inclusive.

Non-Smalltalkers might be confused when seeing:

(10 to: 0 by: -1) do:[:eachNumber | 
  eachNumber displayNl.
]

which has the same effect, but a slightly different mechanism.

The first one sends a "to:by:do:" message to the Integer 10, passing "0", "-1", and the closure as arguments. There (in the integer), the counting and closure invokation takes place (who cares how it does it?).

The second example first instantiates a range-collection object (called Interval in Smalltalk) with the "to:by:" message (sent to the integer), and then this Interval object gets a "do:" message.
Which - like all collections - enumerates its elements, in this case [10..0].

Thus the first variant is one message send (aka virtual function call) to the number, whereas the second is two message sends and an object instantiation.

The nice thing with Intervals is that they can be concatenated with a "," operator (like all collections); thus, I could also write:

(10 to: 5 by: -1),(0 to: 4) do:[:eachNumber | 
  eachNumber displayNl.
]

to enumerate in a different order,
or combine ranges with a constant array:

(10 to: 0 by: -2),#(99 999),(1 to: 9 by: 2) do:[:each | 
  each displayNl.
]

or with a computed array:

(10 to: 0 by: -2),{ 10 factorial . 11 factorial},(1 to: 9 by: 2) do:[:each | 
  each displayNl.
]

PS: there is also a reverse do, as in:

(0 to:10) reverseDo:[:each | 
  each displayNl.
]

SNOBOL4

        COUNT = 10
LOOP    OUTPUT = COUNT
        COUNT = COUNT - 1
        GE(COUNT, 0)     :S(LOOP)
END

SNUSP

++++++++++>++++++++++!/- @!\=@\.@@@-@-----#   atoi
    \n      counter  #\?>.</  \ @@@+@+++++#   itoa
                       loop

Sparkling

for var i = 10; i >= 0; i-- {
    print(i);
}

Spin

Works with: BST/BSTC
Works with: FastSpin/FlexSpin
Works with: HomeSpun
Works with: OpenSpin
con
  _clkmode = xtal1 + pll16x
  _clkfreq = 80_000_000

obj
  ser : "FullDuplexSerial.spin"

pub main | n
  ser.start(31, 30, 0, 115200)

  repeat n from 10 to 0
    ser.dec(n)
    ser.tx(32)

  waitcnt(_clkfreq + cnt)
  ser.stop
  cogstop(0)
Output:
10 9 8 7 6 5 4 3 2 1 0

SPL

> i, 10..0,-1
  #.output(i)
<

SSEM

The SSEM can't print, so the results are stored in an array at addresses 22 to 31. Array access is done using self-modifying code: on each iteration we subtract the current value of n (stored at address 18) from the illegal instruction c to 32, yielding the actual instruction we use to store n into the array.

10001000000000100000000000000000   0. -17 to c
11001000000001100000000000000000   1. c to 19
11001000000000100000000000000000   2. -19 to c
01001000000000010000000000000000   3. Sub. 18
00010000000001100000000000000000   4. c to 8
01001000000000100000000000000000   5. -18 to c
11001000000001100000000000000000   6. c to 19
11001000000000100000000000000000   7. -19 to c
00000000000000000000000000000000   8. generated at run time
11110000000000010000000000000000   9. Sub. 15
01001000000001100000000000000000  10. c to 18
11110000000000010000000000000000  11. Sub. 15
00000000000000110000000000000000  12. Test
00001000000000000000000000000000  13. 16 to CI
00000000000001110000000000000000  14. Stop
10000000000000000000000000000000  15. 1
11111111111111111111111111111111  16. -1
00000100000001100000000000000000  17. c to 32
01010000000000000000000000000000  18. 10

Stata

See forvalues and foreach in Stata help.

forvalues n=10(-1)0 {
        display `n'
}

forvalues n=10 9 to 0 {
        display `n'
}

foreach n of numlist 10/0 {
        display `n'
}

Swift

for i in stride(from: 10, through: 0, by: -1) {
  println(i)
}

Alternately:

for i in lazy(0...10).reverse() {
  println(i)
}

In Swift 1.2 Alternately:

for i in reverse(0 ... 10) {
  println(i)
}

Alternately (removed in Swift 3):

for var i = 10; i >= 0; i-- {
  println(i)
}

Swift 3:

for i in (0...10).reversed() {
    print(i)
}

Tailspin

Not really a for-loop, but it sends a stream of values where each gets treated the same way.

10..0:-1 -> '$;
' -> !OUT::write

Tcl

for {set i 10} {$i >= 0} {incr i -1} {
    puts $i
}
# puts "We have liftoff!"

Trith

10 inc iota reverse [print] each
10 [dup print dec] [dup 0 >=] while drop

TUSCRIPT

$$ MODE TUSCRIPT
LOOP n=10,0,-1
 PRINT n
ENDLOOP

UNIX Shell

Works with: Bourne Shell
i=10
while test $i -ge 0; do
	echo $i
	i=`expr $i - 1`
done

# or

jot - 10 0 -1

# or

seq 10 -1 0

Works with: bash
for(( Z=10; Z>=0; Z-- )); do
    echo $Z
done

#or

for Z in {10..0}; do
    echo $Z
done

UnixPipes

Works with: OpenBSD version 4.9
yes '' | cat -n | head -n 11 | while read n; do
	expr $n - 1
done | tail -r

This pipe uses several nonstandard commands: cat -n and tail -r might not work with some systems. If there is no tail -r, try tac.

Ursa

decl int i
for (set i 10) (> i -1) (dec i)
	out i endl console
end for

V

10 
[0 >]
  [dup puts pred]
while

Vala

for (int i = 10; i >= 0; --i)
    stdout.printf("%d\n", i);

Vedit macro language

for (#1 = 10; #1 >= 0; #1--) {
    Num_Type(#1)
}

Verilog

module main;
  integer  i;
  
  initial begin

    for(i = 10; i >= 0; i = i - 1)  $write(i);
  $finish ;
  end
endmodule

V (Vlang)

fn main() {
    for i := 10; i >= 0; i-- {
        print('$i ')
    }
}
Output:
10 9 8 7 6 5 4 3 2 1 0 

Wart

for i 10 (i >= 0) --i
  prn i

Wren

for (i in 10..0) System.write("%(i) ")
System.print()
Output:
10 9 8 7 6 5 4 3 2 1 0 

XPL0

include c:\cxpl\codes;          \intrinsic 'code' declarations
int I;
for I:= 10 downto 0 do
        [IntOut(0, I); CrLf(0)]

Z80 Assembly

Because of the way looping typically works in hardware, as well as 10 being two digits, it's more efficient to only print numbers 9 through 1 in the loop body, and do the rest outside it.

org &1000

LD A,'1'
CALL &BB5A
LD A,'0'
CALL &BB5A

LD B,9
LD A,'9'

for:
CALL &BB5A
DEC A
DJNZ for

LD A,'0'
JP &BB5A	;its RET returns to BASIC for us.
Output:
Amstrad Microcomputer   (v4)
(c) 1985 Amstrad plc 
         and Locomotive Software Ltd.
ParaDOS V1.2+ (c)2015 BitWise Systems.

BASIC 1.1
Ready
call &1000
109876543210
Ready

zkl

foreach n in ([10..0,-1]){ println(n) }
[10..0,-1].apply() //-->L(10,9,8,7,6,5,4,3,2,1,0)
   // tail recursion
fcn(n){ n.println(); if(n==0)return(); return(self.fcn(n-1)) }(10)

Zig

const std = @import("std");

pub fn main() !void {
    var i: u8 = 11;
    while (i > 0) {
        i -= 1;
        try std.io.getStdOut().writer().print("{d}\n", .{i});
    }
}