Loops/For with a specified step: Difference between revisions

Zig version with for-loop added
(→‎{{header|REXX}}: add version 3)
(Zig version with for-loop added)
 
(143 intermediate revisions by 67 users not shown)
Line 2:
[[Category:Simple]]
 
 
Demonstrate a for-loop where the step-value is greater than one.
;Task:
Demonstrate a   ''for-loop''   where the step-value is greater than one.
 
 
;Related tasks:
*   [[Loop over multiple arrays simultaneously]]
*   [[Loops/Break]]
*   [[Loops/Continue]]
*   [[Loops/Do-while]]
*   [[Loops/Downward for]]
*   [[Loops/For]]
*   [[Loops/For with a specified step]]
*   [[Loops/Foreach]]
*   [[Loops/Increment loop index within loop body]]
*   [[Loops/Infinite]]
*   [[Loops/N plus one half]]
*   [[Loops/Nested]]
*   [[Loops/While]]
*   [[Loops/with multiple ranges]]
*   [[Loops/Wrong ranges]]
<br><br>
 
=={{header|11l}}==
<syntaxhighlight lang="11l">L(i) (1..9).step(2)
print(i)</syntaxhighlight>
 
{{out}}
<pre>
1
3
5
7
9
</pre>
 
=={{header|360 Assembly}}==
;Basic - Algol style
The opcode BXH uses 3 registers, one for index one for step and one for limit.
<langsyntaxhighlight lang="360asm">* Loops/For with a specified step 12/08/2015
LOOPFORS CSECT
USING LOOPFORS,R12
Line 27 ⟶ 60:
XDEC DS CL12 temp for edit
YREGS
END LOOPFORS</langsyntaxhighlight>
{{out}}
<pre>
Line 34 ⟶ 67:
;Basic - Fortran style
The opcode BXLE uses 3 registers, one for index one for step and one for limit.
<langsyntaxhighlight lang="360asm">* == Fortran style ============== test at the end
LA R3,BUF idx=0
LA R5,5 from 5
Line 43 ⟶ 76:
LA R3,4(R3) idx=idx+4
BXLE R5,R6,LOOPJ next j
XPRNT BUF,80 print buffer</langsyntaxhighlight>
;Structured Macros
<langsyntaxhighlight lang="360asm">* == Algol style ================ test at the beginning
LA R3,BUF idx=0
LA R5,5 from 5
Line 56 ⟶ 89:
AR R5,R6 i=i+step
ENDDO , next i
XPRNT BUF,80 print buffer</langsyntaxhighlight>
;Structured Macros HLASM
<langsyntaxhighlight lang="360asm">* == Fortran style ============== test at the end
LA R3,BUF idx=0
DO FROM=(R5,5),TO=(R7,25),BY=(R6,5) for i=5 to 25 step 5
Line 65 ⟶ 98:
LA R3,4(R3) idx=idx+4
ENDDO , next i
XPRNT BUF,80 print buffer</langsyntaxhighlight>
=={{header|6502 Assembly}}==
This loop loads from an array and writes each element to memory addresses $D000, $D002, $D004, $D006, $D008, $D00A, $D00C, $D00E, in ascending order.
 
<syntaxhighlight lang="6502asm">define ArrayPointerLo $00 ;define some helpful labels.
define ArrayPointerHi $01
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
setArray: ;Easy6502 doesn't let us define arbitrary bytes so the best option is to fill the range at runtime.
lda #$10
ldx #0
loop_setArray:
sta $1200,x
clc
adc #$10
inx
cpx #$08
bcc loop_setArray
; stores this sequence of hex values starting at $1200: $10 $20 $30 $40 $50 $60 $70 $80
 
ClearMem: ;clear $D000-$D0FF
lda #0
ldx #0
loop_clearMem:
sta $D000,x
inx
bne loop_clearMem
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; end of prep work, the real code begins here.
 
lda #$12 ;high byte of array address
sta ArrayPointerHi
lda #$00 ;low byte of array address
sta ArrayPointerLo ;these are used to look up the array rather than hard-code it in.
 
 
 
ldx #$0E ;the loop counter, gets decremented twice per iteration to skip the odd addresses.
ldy #7 ;the index into the source array.
 
;on the 6502 looping backwards is almost always faster.
 
loop_fill:
lda (ArrayPointerLo),y ;loads from the array's base address, plus Y
sta $D000,x ;store at $D000+X
dey ;decrement array index
dex
dex ;decrement destination index twice
bpl loop_fill ;if destination index equals #$FF, we are done.
 
brk ;end of program</syntaxhighlight>
 
{{out}}
<pre>
d000: 10 00 20 00 30 00 40 00 50 00 60 00 70 00 80 00
</pre>
 
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program loopstep64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
 
.equ MAXI, 20
/*********************************/
/* 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,0 // init counter
1: // begin loop
mov x0,x4
ldr x1,qAdrsZoneConv // display value
bl conversion10 // call function with 2 parameter (x0,x1)
ldr x0,qAdrszMessResult
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at first @ character
bl affichageMess // display message
add x4,x4,2 // increment counter by 2
cmp x4,MAXI //
ble 1b // loop
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"
</syntaxhighlight>
 
=={{header|Action!}}==
<syntaxhighlight lang="action!">PROC Main()
BYTE i
 
FOR i=0 TO 70 STEP 7
DO
PrintF("%B ",i)
OD
RETURN</syntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/For_with_a_specified_step.png Screenshot from Atari 8-bit computer]
<pre>
0 7 14 21 28 35 42 49 56 63 70
</pre>
 
=={{header|Ada}}==
Line 74 ⟶ 233:
Looper_3 most closely adheres to the requirements of this task, and achieves this by using a second range for the indices.
 
<langsyntaxhighlight lang="ada">with Loopers;
use Loopers;
 
Line 138 ⟶ 297:
end Loopers;
 
</syntaxhighlight>
</lang>
 
=={{header|Agena}}==
Tested with Agena 2.9.5 Win32
<langsyntaxhighlight lang="agena">for i from 2 to 8 by 2 do
print( i )
od</langsyntaxhighlight>
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">integer i;
 
i = 0;
Line 155 ⟶ 314:
}
 
o_newline();</langsyntaxhighlight>
 
=={{header|ALGOL 60}}==
'''for''' i:=5 '''step''' 5 '''until''' 25 '''do'''
<lang algol60>
FOR i:=5 UNTIL 25 STEP 5 DO
OUTINTEGER(i)
</lang>
 
 
=={{header|ALGOL 68}}==
Line 199 ⟶ 355:
* '''until'''<sup>(C)</sup> - for late loop termination.
* '''foreach'''<sup>(S)</sup> - for working on arrays in [[wp:Parallel computing|parallel]].
 
=={{header|ALGOL W}}==
<syntaxhighlight lang="algolw">begin
for i := 3 step 2 until 9 do write( i )
end.</syntaxhighlight>
 
=={{header|ALGOL-M}}==
<langsyntaxhighlight lang="algol">BEGIN
INTEGER I;
FOR I := 1 STEP 3 UNTIL 19 DO
WRITE( I );
END</langsyntaxhighlight>
 
=={{header|ALGOL WAppleScript}}==
<lang algolw>begin
for i := 3 step 2 until 9 do write( i )
end.</lang>
 
<syntaxhighlight lang="applescript">repeat with i from 2 to 10 by 2
=={{header|AppleScript|}}==
 
<lang AppleScript>repeat with i from 2 to 10 by 2
log i
end repeat</langsyntaxhighlight>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
 
/* ARM assembly Raspberry PI */
/* program loopstep2.s */
 
/* Constantes */
.equ STDOUT, 1 @ Linux output console
.equ EXIT, 1 @ Linux syscall
.equ WRITE, 4 @ Linux syscall
.equ MAXI, 20
/*********************************/
/* 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,#0
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
add r4,#2 @ increment counter by 2
cmp r4,#MAXI @
ble 1b @ loop
 
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 */
/***************************************************/
/* integer division unsigned */
/***************************************************/
division:
/* r0 contains dividend */
/* r1 contains divisor */
/* r2 returns quotient */
/* r3 returns remainder */
push {r4, lr}
mov r2, #0 @ init quotient
mov r3, #0 @ init remainder
mov r4, #32 @ init counter bits
b 2f
1: @ loop
movs r0, r0, LSL #1 @ r0 <- r0 << 1 updating cpsr (sets C if 31st bit of r0 was 1)
adc r3, r3, r3 @ r3 <- r3 + r3 + C. This is equivalent to r3 ? (r3 << 1) + C
cmp r3, r1 @ compute r3 - r1 and update cpsr
subhs r3, r3, r1 @ if r3 >= r1 (C=1) then r3 ? r3 - r1
adc r2, r2, r2 @ r2 <- r2 + r2 + C. This is equivalent to r2 <- (r2 << 1) + C
2:
subs r4, r4, #1 @ r4 <- r4 - 1
bpl 1b @ if r4 >= 0 (N=0) then loop
pop {r4, lr}
bx lr
 
 
</syntaxhighlight>
 
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">loop 0..10 .step:2 'i [
print i
]</syntaxhighlight>
{{out}}
<pre>0
2
4
6
8
10</pre>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">SetBatchLines, -1
iterations := 5
step := 10
Line 229 ⟶ 541:
MsgBox, % A_Index
}
ExitApp</langsyntaxhighlight>
 
=={{header|Avail}}==
<syntaxhighlight lang="avail">For each i from 0 to 100 by 7 do [Print: “i” ++ " is a multiple of 7!\n";];</syntaxhighlight>
Note the <code>0 to 100 by 7</code> segment 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.
 
=={{header|AWK}}==
 
<langsyntaxhighlight lang="awk">BEGIN {
for (i= 2; i <= 8; i = i + 2) {
print i
}
print "Ain't never too late!"
}</langsyntaxhighlight>
 
=={{header|Axe}}==
Axe does not support a step size other than 1. However, one can modify the increment variable inside the loop to accomplish the same task.
 
This example increments by 2:
<langsyntaxhighlight lang="axe">For(I,0,10)
Disp I▶Dec,i
I++
End</langsyntaxhighlight>
 
=={{header|BASICBait}}==
<syntaxhighlight lang="bait">
fun main() {
// Print all single digit odd numbers
for i := 1; i < 10; i += 2 {
println(i)
}
}
</syntaxhighlight>
 
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
<langsyntaxhighlight lang="qbasic">FOR I = 2 TO 8 STEP 2 : PRINT I; ", "; : NEXT I : PRINT "WHO DO WE APPRECIATE?"</langsyntaxhighlight>
 
==={{header|BaCon}}===
This prints all odd digits:
<langsyntaxhighlight lang="freebasic">
FOR i = 1 TO 10 STEP 2
PRINT i
NEXT</langsyntaxhighlight>
 
==={{header|Basic|QuickBasic}}===
{{works with|QuickBasic|4.5}}
<langsyntaxhighlight lang="qbasic">for i = 2 to 8 step 2
print i; ", ";
next i
print "who do we appreciate?"</langsyntaxhighlight>
 
==={{header|smart BASICBASIC256}}===
<syntaxhighlight lang="basic256">for i = 1 to 21 step 2
-- [http://rosettacode.org/wiki/User:Sarossell Scott A. Rossell, 12-27-16]
print i; " ";
next i
end</syntaxhighlight>
 
==={{header|BBC BASIC}}===
<syntaxhighlight lang="bbcbasic"> FOR n = 2 TO 8 STEP 1.5
PRINT n
NEXT</syntaxhighlight>
{{out}}
<pre>
2
3.5
5
6.5
8
</pre>
 
==={{header|Chipmunk Basic}}===
{{works with|Chipmunk Basic|3.6.4}}
<syntaxhighlight lang="qbasic">10 for i = 1 to 21 step 2
20 print i;
30 next i</syntaxhighlight>
 
==={{header|Commodore BASIC}}===
<syntaxhighlight lang="qbasic">10 FOR I = 1 TO 10 STEP 2
20 PRINT I
30 NEXT</syntaxhighlight>
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
For i As Integer = 1 To 21 Step 2
Print i; " ";
Next
Print
Sleep</syntaxhighlight>
 
==={{header|Gambas}}===
'''[https://gambas-playground.proko.eu/?gist=cdd9b10b64ac4d78b75c364061f25641 Click this link to run this code]'''
<syntaxhighlight lang="gambas">Public Sub Main()
Dim siCount As Short
 
For siCount = 1 To 50 Step 5
Print "Gambas is great!"
Next
 
End</syntaxhighlight>
<pre>Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!</pre>
 
==={{header|GW-BASIC}}===
{{works with|BASICA}}
{{works with|PC-BASIC|any}}
<syntaxhighlight lang="qbasic">10 FOR I = 1 TO 21 STEP 2
20 PRINT I;
30 NEXT I</syntaxhighlight>
 
==={{header|IS-BASIC}}===
<syntaxhighlight lang="is-basic">100 FOR I=1 TO 10 STEP 2
110 PRINT I
120 NEXT</syntaxhighlight>
 
==={{header|Liberty BASIC}}===
<syntaxhighlight lang="lb">for i = 2 to 8 step 2
print i; ", ";
next i
print "who do we appreciate?"
end</syntaxhighlight>
 
==={{header|Microsoft Small Basic}}===
<syntaxhighlight lang="microsoftsmallbasic">For i = 0 To 100 Step 2
TextWindow.WriteLine(i)
EndFor</syntaxhighlight>
 
==={{header|Minimal BASIC}}===
{{works with|QBasic}}
{{works with|QuickBasic}}
{{works with|Applesoft BASIC}}
{{works with|BASICA}}
{{works with|Chipmunk Basic}}
{{works with|GW-BASIC}}
{{works with|MSX BASIC}}
{{works with|Just BASIC}}
{{works with|Liberty BASIC}}
{{works with|Run BASIC}}
{{works with|Yabasic}}
<syntaxhighlight lang="qbasic">10 FOR I = 1 TO 21 STEP 2
20 PRINT I; " ";
30 NEXT I
40 END</syntaxhighlight>
 
==={{header|MSX Basic}}===
<syntaxhighlight lang="qbasic">10 FOR I = 1 TO 21 STEP 2
20 PRINT I;
30 NEXT I</syntaxhighlight>
 
==={{header|NS-HUBASIC}}===
<syntaxhighlight lang="ns-hubasic">10 FOR I=1 TO 10 STEP 2
20 PRINT I
30 NEXT</syntaxhighlight>
{{out}}
<pre> 1 3 5 7 9 11 13 15 17 19 21</pre>
 
==={{header|PureBasic}}===
<syntaxhighlight lang="purebasic">For i = -15 To 25 Step 5
Debug i
Next i</syntaxhighlight>
{{out}}
<pre>-15
-10
-5
0
5
10
15
20
25</pre>
 
Decrementing with step
<syntaxhighlight lang="purebasic">For i = 10 To 0 Step -2
Debug i
Next ; i is optional</syntaxhighlight>
{{out}}
<pre>10
8
6
4
2
0</pre>
 
==={{header|QB64}}===
<syntaxhighlight lang="qbasic">For i% = 0 to 10 Step 2
Print i%
Next 'To be more explicit use "Next i%"
</syntaxhighlight>
{{out}}
A newline is inserted automatically after the Print statement
<pre>0
2
4
6
8
10</pre>
 
We can also decrement with stepping
<syntaxhighlight lang="qbasic">For i% = 10 to 0 Step -2
Print i%
Next i </syntaxhighlight>
{{out}}
<pre>10
8
6
4
2
9</pre>
 
==={{header|QBasic}}===
{{works with|QBasic|1.1}}
{{works with|QuickBasic|4.5}}
<syntaxhighlight lang="qbasic">FOR i = 1 TO 21 STEP 2
PRINT i;
NEXT i</syntaxhighlight>
 
==={{header|Quite BASIC}}===
<syntaxhighlight lang="qbasic">10 FOR I = 1 TO 21 STEP 2
20 PRINT I; " ";
30 NEXT I</syntaxhighlight>
 
==={{header|Run BASIC}}===
<syntaxhighlight lang="runbasic">for i = 2 to 8 step 2
print i; ", ";
next i
print "who do we appreciate?"</syntaxhighlight>
{{out}}
<pre>2, 4, 6, 8, who do we appreciate?</pre>
 
==={{header|smart BASIC}}===
Notice how the ampersand (&) is used to concatenate the variable with the text instead of a semicolon.
 
<langsyntaxhighlight lang="qbasic">FOR n = 2 TO 8 STEP 2
PRINT n & "..";
NEXT n
PRINT "who do we appreciate?"
END</langsyntaxhighlight>
 
==={{header|CommodoreTI-83 BASIC}}===
Prints numbers from 0 to 100 stepping by 5.
<lang qbasic>10 FOR I = 1 TO 10 STEP 2
<syntaxhighlight lang="ti83b">:For(I,0,100,5
20 PRINT I
:Disp I
30 NEXT</lang>
:End</syntaxhighlight>
 
==={{header|TI-89 BASIC}}===
<syntaxhighlight lang="ti89b">Local i
For i, 0, 100, 5
Disp i
EndFor</syntaxhighlight>
 
==={{Header|Tiny BASIC}}===
<syntaxhighlight lang="qbasic"> REM TinyBasic does not have a for-loop construct.
REM Equivalent using conditional jump:
 
LET i = 1
10 IF i > 21 THEN GOTO 20
PRINT i
LET i = i + 2
GOTO 10
20 END</syntaxhighlight>
 
==={{header|True BASIC}}===
<syntaxhighlight lang="qbasic">
FOR i = 1 TO 21 STEP 2
PRINT i; " ";
NEXT i
END
</syntaxhighlight>
{{out}}
<pre>1 3 5 7 9 11 13 15 17 19 21</pre>
Since TrueBasic does not distinguish between integer or real values, we can increment using decimal values as well
 
<syntaxhighlight lang="qbasic">FOR i = 1 TO 5 STEP .5
PRINT i
NEXT i
END</syntaxhighlight>
{{out}}
<pre>1
1.5
2
2.5
3
3.5
4
4.5
5</pre>
 
==={{header|Visual Basic}}===
{{works with|Visual Basic|VB6 Standard}}
<syntaxhighlight lang="vb">Sub MyLoop()
For i = 2 To 8 Step 2
Debug.Print i;
Next i
Debug.Print
End Sub</syntaxhighlight>
{{out}}
<pre> 2 4 6 8 </pre>
 
==={{header|Visual Basic .NET}}===
{{works with|Visual Basic .NET|.NET Core 3.0}}
<syntaxhighlight lang="vbnet">Imports System.Console
Module Program
Sub Main()
For i = 2 To 8 Step 2
Write($"{i}, ")
Next
WriteLine("who do we appreciate?")
End Sub
End Module</syntaxhighlight>
{{out}}
<pre>2, 4, 6, 8, who do we appreciate?</pre>
 
{{works with|Visual Basic .NET|2011}}
<syntaxhighlight lang="vbnet">Public Class FormPG
Private Sub FormPG_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim i As Integer, buffer As String
buffer = ""
For i = 2 To 8 Step 2
buffer = buffer & i & " "
Next i
Debug.Print(buffer)
End Sub
End Class</syntaxhighlight>
{{out}}
<pre>2 4 6 8 </pre>
 
==={{header|XBasic}}===
{{works with|Windows XBasic}}
<syntaxhighlight lang="xbasic">PROGRAM "forby"
 
DECLARE FUNCTION Entry()
 
FUNCTION Entry()
FOR i% = 0 TO 100 STEP 2
PRINT FORMAT$("###", i%)
NEXT i%
END FUNCTION
END PROGRAM</syntaxhighlight>
 
==={{header|Yabasic}}===
<syntaxhighlight lang="yabasic">for i = 1 to 21 step 2
print i, " ";
next i
print
end</syntaxhighlight>
 
==={{header|ZX Spectrum Basic}}===
<syntaxhighlight lang="basic">10 FOR l = 2 TO 8 STEP 2
20 PRINT l; ", ";
30 NEXT l
40 PRINT "Who do we appreciate?"</syntaxhighlight>
 
=={{header|Batch File}}==
<langsyntaxhighlight lang="dos">@echo off
for /l %%A in (1,2,10) do (
echo %%A
)</langsyntaxhighlight>
{{Out}}
<pre>>Sample.BAT
Line 298 ⟶ 917:
 
></pre>
 
=={{header|BBC BASIC}}==
<lang bbcbasic> FOR n = 2 TO 8 STEP 1.5
PRINT n
NEXT</lang>
{{out}}
<pre>
2
3.5
5
6.5
8
</pre>
 
=={{header|bc}}==
<langsyntaxhighlight lang="bc">for (i = 2; i <= 10; i += 2) {
i
}</langsyntaxhighlight>
 
=={{header|Befunge}}==
{{trans|C}}
<langsyntaxhighlight lang="befunge">1 >:.55+,v
@_^#`9:+2<</langsyntaxhighlight>
 
=={{header|C}}==
This prints all odd digits:
<langsyntaxhighlight lang="c">int i;
for(i = 1; i < 10; i += 2)
printf("%d\n", i);</langsyntaxhighlight>
 
=={{header|ChucK}}==
Chuck style
<lang c>
SinOsc s => dac;
 
for (0 => int i; i < 2000; 5 +=> i )
{
i => s.freq;
100::ms => now;
}
</lang>
General purpose style:
<lang c>
for (0 => int i; i < 2000; 5 +=> i )
{
<<< i >>>;
}
</lang>
 
=={{header|C++}}==
This prints all odd digits:
<lang cpp>for (int i = 1; i < 10; i += 2)
std::cout << i << std::endl;</lang>
 
=={{header|C sharp|C#}}==
 
<langsyntaxhighlight lang="csharp">using System;
class Program {
Line 364 ⟶ 946:
Console.WriteLine("who do we appreciate?");
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
This prints all odd digits:
<syntaxhighlight lang="cpp">for (int i = 1; i < 10; i += 2)
std::cout << i << std::endl;</syntaxhighlight>
 
=={{header|C3}}==
Print all odd digits:
<syntaxhighlight lang="c3">for (int i = 1; i < 10; i += 2) io::printfn("%d", i);</syntaxhighlight>
 
=={{header|Ceylon}}==
<langsyntaxhighlight lang="ceylon">shared void run() {
for(i in (2..8).by(2)) {
Line 373 ⟶ 964:
}
print("who do we appreciate?");
}</langsyntaxhighlight>
 
=={{header|Chapel}}==
<syntaxhighlight lang="chapel">
// Can be set on commandline via --N=x
config const N = 3;
 
for i in 1 .. 10 by N {
writeln(i);
}
</syntaxhighlight>
{{out}}
<pre>
$ ./loopby
1
4
7
10
 
$ ./loopby --N=4
1
5
9
</pre>
 
=={{header|ChucK}}==
Chuck style
<syntaxhighlight lang="c">
SinOsc s => dac;
 
for (0 => int i; i < 2000; 5 +=> i )
{
i => s.freq;
100::ms => now;
}
</syntaxhighlight>
General purpose style:
<syntaxhighlight lang="c">
for (0 => int i; i < 2000; 5 +=> i )
{
<<< i >>>;
}
</syntaxhighlight>
 
=={{header|Clojure}}==
The first example here is following the literal specification, but is not idiomatic Clojure code.
The second example achieves the same effect without explicit looping, and would (I think) be viewed as better code by the Clojure community.
<langsyntaxhighlight Clojurelang="clojure">(loop [i 0]
(println i)
(when (< i 10)
Line 384 ⟶ 1,017:
 
(doseq [i (range 0 12 2)]
(println i))</langsyntaxhighlight>
 
=={{header|CLU}}==
<syntaxhighlight lang="clu">% This prints all odd digits
 
start_up = proc ()
po: stream := stream$primary_output()
for i: int in int$from_to_by(1, 10, 2) do
stream$putl(po, int$unparse(i))
end
end start_up</syntaxhighlight>
 
=={{header|COBOL}}==
<langsyntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. Display-Odd-Nums.
 
Line 400 ⟶ 1,044:
 
GOBACK
.</langsyntaxhighlight>
 
=={{header|ColdFusion}}==
<langsyntaxhighlight lang="cfm">
<cfloop from="0" to="99" step="3" index="i">
<Cfoutput>#i#</Cfoutput>
</cfloop>
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">
(format t "~{~S, ~}who do we appreciate?~%" (loop for i from 2 to 8 by 2 collect i))
</syntaxhighlight>
</lang>
 
{{out}}
Line 419 ⟶ 1,063:
</pre>
 
=== Using DO ===
=={{header|Chapel}}==
<syntaxhighlight lang="lisp">
<lang chapel>
(do ((n 0 (incf n (+ (random 3) 2)))) ; Initialize to 0 and set random step-value 2, 3 or 4
// Can be set on commandline via --N=x
((> n 20)) ; Break condition
config const N = 3;
(print n)) ; On every loop print value
</syntaxhighlight>
 
for i in 1 .. 10 by N {
writeln(i);
}
</lang>
{{out}}
<pre>
0
$ ./loopby
2
1
4
8
7
10
13
 
15
$ ./loopby --N=4
17
1
20
5
9
</pre>
 
=={{header|D}}==
<langsyntaxhighlight lang="d">import std.stdio, std.range;
 
void main() {
Line 453 ⟶ 1,094:
foreach (i; iota(1, 10, 2))
writeln(i);
}</langsyntaxhighlight>
{{out}}
<pre>1
Line 467 ⟶ 1,108:
 
=={{header|Dao}}==
<langsyntaxhighlight lang="dao"># first value: 1
# max value: 9
# step: 2
for( i = 1 : 2 : 9 ) io.writeln( i )</langsyntaxhighlight>
 
=={{header|Dart}}==
<syntaxhighlight lang="dart">main() {
for (int i = 1; i <= 21; i += 2) print(i);
}</syntaxhighlight>
 
=={{header|Delphi}}==
Line 476 ⟶ 1,122:
It would have to be simulated using something like a While loop.
 
<langsyntaxhighlight Delphilang="delphi">program LoopWithStep;
 
{$APPTYPE CONSOLE}
 
var
i: Integer;
Line 488 ⟶ 1,134:
Inc(i, 2);
end;
end.</langsyntaxhighlight>
 
{{out}}
<pre>2
Line 495 ⟶ 1,140:
6
8</pre>
 
=={{header|Dragon}}==
<syntaxhighlight lang="dragon">for(i = 2, i <= 8,i += 2){
show ", " + i
}
showln "who do we appreciate?"</syntaxhighlight>
 
=={{header|DWScript}}==
<langsyntaxhighlight Delphilang="delphi">var i : Integer;
 
for i := 2 to 8 step 2 do
PrintLn(i);</langsyntaxhighlight>
 
{{out}}
Line 508 ⟶ 1,159:
8</pre>
 
=={{header|EDyalect}}==
<syntaxhighlight lang="dyalect">//Prints odd numbers from 1 to 10
for i in 1^2..10 {
print(i)
}</syntaxhighlight>
 
=={{header|E}}==
There is no step in the standard numeric range object (a..b and a..!b) in E, which is typically used for numeric iteration.
An ordinary while loop can of course be used:
<syntaxhighlight lang="e">var i := 2
 
<lang e>var i := 2
while (i <= 8) {
print(`$i, `)
i += 2
}
println("who do we appreciate?")</langsyntaxhighlight>
 
A programmer frequently in need of iteration with an arbitrary step should define an appropriate range object:
 
<langsyntaxhighlight lang="e">def stepRange(low, high, step) {
def range {
to iterate(f) {
Line 538 ⟶ 1,193:
print(`$i, `)
}
println("who do we appreciate?")</langsyntaxhighlight>
 
The least efficient, but perhaps convenient, solution is to iterate over successive integers and discard undesired ones:
 
<langsyntaxhighlight lang="e">for i ? (i %% 2 <=> 0) in 2..8 {
print(`$i, `)
}
println("who do we appreciate?")</langsyntaxhighlight>
 
=={{header|EasyLang}}==
<syntaxhighlight lang="easylang">
# Prints even numbers from 0 to 100
for i = 0 step 2 to 100
print i
.
</syntaxhighlight>
 
=={{header|EchoLisp}}==
Steps may be integers, float, rationals.
<langsyntaxhighlight lang="lisp">
(for ((i (in-range 0 15 2))) (write i))
0 2 4 6 8 10 12 14
Line 558 ⟶ 1,221:
(for ((x (in-range 0 15 PI))) (write x))
0 3.141592653589793 6.283185307179586 9.42477796076938 12.566370614359172
</syntaxhighlight>
</lang>
 
=={{header|Ela}}==
 
<langsyntaxhighlight lang="ela">open monad io
for m s n | n > m = do return ()
Line 569 ⟶ 1,232:
for m s (n+s)
_ = for 10 2 0 ::: IO</langsyntaxhighlight>
 
{{out}}
Line 580 ⟶ 1,243:
 
=={{header|Elena}}==
ELENA 6.x
<lang elena>import extensions.
<syntaxhighlight lang="elena">public program()
{
program =
for(int i := 2; i <= 8; i += 2 )
[
{
2 to:8 by:2 do(:i)
console.writeLine(i)
[
}
console writeLine:i.
}</syntaxhighlight>
].
].</lang>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">defmodule Loops do
def for_step(n, step) do
IO.inspect Enum.take_every(1..n, step)
Line 597 ⟶ 1,259:
end
 
Loops.for_step(20, 3)</langsyntaxhighlight>
 
{{out}}
Line 604 ⟶ 1,266:
</pre>
or
<langsyntaxhighlight lang="elixir">iex(1)> Stream.iterate(1, &(&1+2)) |> Enum.take(10)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]</langsyntaxhighlight>
 
=={{header|ERREEMal}}==
<syntaxhighlight lang="emal">
<lang ERRE>
for int i = 2; i FOR<= N8; i+= 2 TOdo 8write(i + STEP", 1.5") DOend
writeLine("who do we appreciate?")
PRINT(N)
</syntaxhighlight>
END FOR
</lang>
{{out}}
<pre>
2, 4, 6, 8, who do we 2appreciate?
3.5
5
6.5
8
</pre>
 
=={{header|Erlang}}==
<langsyntaxhighlight lang="erlang">%% Implemented by Arjun Sunel
%% for_loop/4 by Bengt Kleberg.
-module(loop_step).
Line 640 ⟶ 1,297:
for_loop( I+Step, End, Step, Do );
for_loop( _I, _End, _Step, _Do ) -> ok.
</syntaxhighlight>
</lang>
 
{{out}}
<pre>
* * ok
</pre>
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
FOR N=2 TO 8 STEP 1.5 DO
PRINT(N)
END FOR
</syntaxhighlight>
{{out}}
<pre>
2
3.5
5
6.5
8
</pre>
 
=={{header|Euphoria}}==
 
<syntaxhighlight lang="euphoria">
<lang Euphoria>
for i = 1 to 10 by 2 do
? i
end for
</syntaxhighlight>
</lang>
As a note, <code>? something</code> is shorthand for:
<syntaxhighlight lang="euphoria">
<lang Euphoria>
print(1, something)
puts(1, "\n")
</syntaxhighlight>
</lang>
 
<code>print()</code> differs from <code>puts()</code> in that <code>print()</code> will print out the actual <code>sequence</code> it is given.
If it is given an <code>integer</code>, or an <code>atom</code>
(Any number that is not an <code>integer</code>), it will print those out as-is.
 
=={{header|F_Sharp|F#}}==
<syntaxhighlight lang="fsharp">for i in 2..2..8 do
printf "%d, " i
printfn "done"</syntaxhighlight>
 
{{out}}
<pre>2, 4, 6, 8, done
</pre>
 
=={{header|Factor}}==
Prints odd digits.
<langsyntaxhighlight lang="factor">1 10 2 <range> [ . ] each</langsyntaxhighlight>
 
=={{header|FALSE}}==
<langsyntaxhighlight lang="false">2[$9\>][$.", "2+]#"who do we appreciate!"</langsyntaxhighlight>
 
=={{header|Fantom}}==
 
<langsyntaxhighlight lang="fantom">
class Main
{
Line 685 ⟶ 1,366:
}
}
</syntaxhighlight>
</lang>
 
=={{header|FBSL}}==
<langsyntaxhighlight lang="qbasic">#APPTYPE CONSOLE
 
DIM n AS INTEGER
Line 697 ⟶ 1,378:
PRINT ", who will we obliterate?"
PAUSE
</syntaxhighlight>
</lang>
 
=={{header|Fermat}}==
<syntaxhighlight lang="fermat">for i = 1 to 100 by 13 do !i;!' '; od</syntaxhighlight>
{{out}}<pre>1 14 27 40 53 66 79 92</pre>
 
=={{header|FOCAL}}==
If a <tt>FOR</tt> statement has three parameters, they are (in order) the start, the step, and the end; if only two parameters are supplied, they are taken to be the start and the end. The step is then set to 1.
<langsyntaxhighlight lang="focal">FOR I = 1,3,10; TYPE I, !</langsyntaxhighlight>
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: test
9 2 do
i .
2 +loop
." who do we appreciate?" cr ;</langsyntaxhighlight>
 
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
<langsyntaxhighlight lang="fortran">do i = 1,10,2
print *, i
end do</langsyntaxhighlight>
 
{{works with|Fortran|77 and later}}
<langsyntaxhighlight lang="fortran"> PROGRAM STEPFOR
INTEGER I
 
Line 726 ⟶ 1,411:
 
STOP
END</langsyntaxhighlight>
 
=={{header|FreeBASICFrink}}==
<syntaxhighlight lang="frink">
<lang freebasic>' FB 1.05.0 Win64
for a = 1 to 100 step 5
println[a]
</syntaxhighlight>
 
All values may have units of measure, in which case a specified step is required:
For i As Integer = 1 To 21 Step 2
<syntaxhighlight lang="frink">
Print i; " ";
for a = 1 km to 3 km step 1 meter
Next
println[a]
Print
</syntaxhighlight>
Sleep</lang>
 
{{out}}
<pre>
1 3 5 7 9 11 13 15 17 19 21
</pre>
 
=={{header|F_Sharp|F#}}==
<lang fsharp>for i in 2..2..8 do
printf "%d, " i
printfn "done"</lang>
 
{{out}}
<pre>2, 4, 6, 8, done
</pre>
 
=={{header|FutureBasic}}==
<langsyntaxhighlight lang="futurebasic">
Str15 s(11)
include "ConsoleWindow"
long i
 
dim as Str15 s(11)
dim as long i
 
s(0) = "Somewhere"
Line 768 ⟶ 1,440:
print s(i);
next
</lang>
Output:
<pre>
Somewhere over the rainbow
Bluebirds fly.
</pre>
 
HandleEvents
=={{header|Gambas}}==
</syntaxhighlight>
'''[https://gambas-playground.proko.eu/?gist=cdd9b10b64ac4d78b75c364061f25641 Click this link to run this code]'''
{{out}}
<lang gambas>Public Sub Main()
<pre>Somewhere over the rainbow
Dim siCount As Short
Bluebirds fly.</pre>
 
=={{header|GML}}==
For siCount = 1 To 50 Step 5
<syntaxhighlight lang="gml">for(i = 0; i < 10; i += 2)
Print "Gambas is great!"
show_message(string(i))</syntaxhighlight>
Next
 
End</lang>
<pre>
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
Gambas is great!
</pre>
 
=={{header|GAP}}==
# Use a range [a, b .. c], where the step is b-a (b is the value following a), and c-a must be a multiple of the step.
<langsyntaxhighlight lang="gap">for i in [1, 3 .. 11] do
Print(i, "\n");
od;
Line 810 ⟶ 1,463:
9
11
</syntaxhighlight>
</lang>
 
=={{header|GML}}==
<lang GML>for(i = 0; i < 10; i += 2)
show_message(string(i))</lang>
 
=={{header|Go}}==
This prints all odd digits:
<langsyntaxhighlight lang="go">for i := 1; i < 10; i += 2 {
fmt.Printf("%d\n", i)
}</langsyntaxhighlight>
 
=={{header|Groovy}}==
"for" loop:
<langsyntaxhighlight lang="groovy">for(i in (2..9).step(2)) {
print "${i} "
}
println "Who do we appreciate?"</langsyntaxhighlight>
 
"each() method:
Though technically not a loop, most Groovy programmers would use the slightly more terse "each()" method on the collection itself, instead of a "for" loop.
<langsyntaxhighlight lang="groovy">(2..9).step(2).each {
print "${it} "
}
println "Who do we appreciate?"</langsyntaxhighlight>
 
{{out}}
Line 841 ⟶ 1,490:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Control.Monad (forM_)
main = do forM_ [2,4..8] (\x -> putStr (show x ++ ", "))
putStrLn "who do we appreciate?"</langsyntaxhighlight>
 
=={{header|Haxe}}==
While Haxe's for-loop does not allow you to directly specify the step size, it is easy to create an iterator that allows you to do that.
 
<syntaxhighlight lang="haxe">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(2, 8, 2)) {
Sys.print('$i ');
}
Sys.println('WHOM do we appreciate? GRAMMAR! GRAMMAR! GRAMMAR!');
}
}</syntaxhighlight>
 
{{out}}
<pre>2 4 6 8 WHOM do we appreciate? GRAMMAR! GRAMMAR! GRAMMAR!</pre>
 
=={{header|hexiscript}}==
<syntaxhighlight lang="hexiscript">for let i 0; i <= 50; let i (i + 5)
println i
endfor</syntaxhighlight>
 
=={{header|HicEst}}==
<langsyntaxhighlight lang="hicest">DO i = 1, 6, 1.25 ! from 1 to 6 step 1.25
WRITE() i
ENDDO</langsyntaxhighlight>
 
=={{header|HolyC}}==
This prints all odd digits:
<syntaxhighlight lang="holyc">U8 i;
for (i = 1; i < 10; i += 2)
Print("%d\n", i);</syntaxhighlight>
 
=={{header|Hy}}==
<syntaxhighlight lang="clojure">(for [i (range 1 10 2)] (print i))</syntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
Icon and Unicon accomplish loop stepping through the use of a generator, the ternary operator to-by, and the every clause which forces a generator to consume all of its results.
Because to-by is an operator it has precedence (just higher than assignments) and associativity (left) and can be combined with other operators.
<syntaxhighlight lang="python">
<lang Icon>
every 1 to 10 by 2 # the simplest case that satisfies the task, step by 2
 
every 1 to 10 # no toby, step is by 1 by default
every EXPR1 to EXPR2 by EXPR3 do EXPR4 # general case - EXPRn can be complete expressions including other generators such as to-by, every's do is optional
steps := [2,3,5,7] # a list
Line 867 ⟶ 1,560:
 
every writes( (TO_BY_EXPR) | "\n", " " ) # if you want to see how any of these work
</syntaxhighlight>
</lang>
The ability to combine to-by arbitrarily is quite powerful.
Yet it can lead to unexpected results. In cases of combined to-by operators the left associativity seems natural where the by is omitted.
In cases where the by is used it might seem more natural to be right associative.
If in doubt parenthesize.
 
=={{Header|Insitux}}==
 
<syntaxhighlight lang="insitux">
(for i (range 0 10 2)
(print i)
(continue))
 
;or
(loop 5 i
(print (* i 2)))
</syntaxhighlight>
 
=={{header|Io}}==
<langsyntaxhighlight Iolang="io">for(i,2,8,2,
write(i,", ")
)
write("who do we appreciate?")</langsyntaxhighlight>
 
=={{header|J}}==
<langsyntaxhighlight Jlang="j"> ' who do we appreciate?' ,~ ": 2 * >: i.4
2 4 6 8 who do we appreciate?</langsyntaxhighlight>
 
Note that an expression of the form <code>(start, step) (p. i.) count</code> will generate the specified numbers (<code>p.</code> is J's polynomial primitive, <code>i.</code> is J's index generator). So, to generate the above sequence of integers we could have used:
 
<syntaxhighlight lang=J> 0 2 (p. i.) 5
0 2 4 6 8</syntaxhighlight>
 
Or, using an "actual" for loop:
 
<langsyntaxhighlight Jlang="j"> 3 :0''
r=.$0
for_n. 2 * >: i.4 do.
Line 892 ⟶ 1,602:
' who do we appreciate?' ,~ ":n
)
2 4 6 8 who do we appreciate?</langsyntaxhighlight>
 
That said, note also that J's '''steps''' verb lets us specify how many steps to take:
 
<langsyntaxhighlight Jlang="j"> i:8
_8 _7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7 8
i:8j8
_8 _6 _4 _2 0 2 4 6 8</langsyntaxhighlight>
 
Or, if we prefer, we could borrow the definition of <code>thru</code> from the [[Loops/Downward_for#J|Downward for]] task and then filter for the desired values:
 
<langsyntaxhighlight Jlang="j"> thru=: <./ + i.@(+*)@-~</langsyntaxhighlight>
 
Example use:
 
<langsyntaxhighlight Jlang="j"> (#~ 0 = 2&|) 1 thru 20
2 4 6 8 10 12 14 16 18 20
(#~ 0 = 3&|) 1 thru 20
3 6 9 12 15 18
(#~ 1 = 3&|) 1 thru 20
1 4 7 10 13 16 19</langsyntaxhighlight>
 
And, of course, like filtering in any language, this approach supports non-constant step sizes, either by applying a function to each argument individually:
 
<syntaxhighlight lang="j"> (#~ 1&p:) 1 thru 20
2 3 5 7 11 13 17 19</syntaxhighlight>
 
Or, by inserting a combining function between each value:
 
<syntaxhighlight lang="j"> (-&{.,])/ 1 thru 20
And, of course, like filtering in any language, this approach supports non-constant step sizes:
_10 11 _9 12 _8 13 _7 14 _6 15 _5 16 _4 17 _3 18 _2 19 _1 20</syntaxhighlight>
 
Other structural approaches can also be viable...
<lang J> (#~ 1&p:) 1 thru 20
2 3 5 7 11 13 17 19</lang>
 
=={{header|Java}}==
<langsyntaxhighlight lang="java">for(int i = 2; i <= 8;i += 2){
System.out.print(i + ", ");
}
System.out.println("who do we appreciate?");</langsyntaxhighlight>
 
=={{header|JavaScript}}==
<langsyntaxhighlight lang="javascript">var output = '',
i;
for (i = 2; i <= 8; i += 2) {
Line 932 ⟶ 1,649:
}
output += 'who do we appreciate?';
document.write(output);</langsyntaxhighlight>
 
In a functional idiom of JavaScript, however, we will only be able to compose this computation within the superordinate expressions of our program if it has the the form of an expression returning a value, rather than that of a statement which fires off side-effects but returns no value.
Line 938 ⟶ 1,655:
Following the example of languages like Haskell and J on this page, we can begin by generating the stepped series as an expression. In functional JavaScript we will typically replace a state-changing loop with a non-mutating map or fold, writing, for example, something like:
 
<langsyntaxhighlight JavaScriptlang="javascript">// range(iMax)
// range(iMin, iMax)
// range(iMin, iMax, dI)
Line 958 ⟶ 1,675:
console.log(
range(2, 8, 2).join(', ') + ', who do we appreciate ?'
);</langsyntaxhighlight>
 
Output:
Line 964 ⟶ 1,681:
 
=={{header|jq}}==
To generate the stream: 2,4,6,8:<langsyntaxhighlight lang="jq"># If your version of jq does not have range/3, use this:
def range(m;n;step): range(0; ((n-m)/step) ) | m + (. * step);
 
range(2;9;2)</langsyntaxhighlight>
'''Example''':
<langsyntaxhighlight lang="jq">reduce range(2;9;2) as $i
(""; . + "\($i), ") +
"whom do we appreciate?"</langsyntaxhighlight>
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">for i in 2:2:8
print(i, ", ")
end
println("whom do we appreciate?")</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.0.6
 
fun main(args: Array<String>) {
for (i in 1 .. 21 step 2) print("$i ")
}</langsyntaxhighlight>
 
{{out}}
Line 993 ⟶ 1,710:
=={{header|LabVIEW}}==
{{VI solution|LabVIEW_Loops_For_with_a_specified_step.png}}
 
=={{header|Lambdatalk}}==
<syntaxhighlight lang="scheme">
{def loops_for_with_a_specified_step
{lambda {:a :b :step}
{if {>= :a :b}
then (end of loop)
else :a {loops_for_with_a_specified_step {+ :a :step} :b :step}}}}
-> loops_for_with_a_specified_step
 
{loops_for_with_a_specified_step 0 10 2}
-> 0 2 4 6 8 (end of loop)
 
a more simple way:
 
{S.map {lambda {:i} :i} {S.serie 0 9 2}}
-> 0 2 4 6 8
</syntaxhighlight>
 
=={{header|Lang5}}==
<langsyntaxhighlight lang="lang5">: <range> over iota swap * rot + tuck swap <= select ; : tuck swap over ;
: >>say.(*) . ;
1 10 2 <range> >>say.</langsyntaxhighlight>
 
=={{header|langur}}==
<syntaxhighlight lang="langur">for .i = 1; .i < 10; .i += 2 {
writeln .i
}</syntaxhighlight>
 
{{out}}
<pre>1
3
5
7
9</pre>
 
=={{header|Lasso}}==
<langsyntaxhighlight Lassolang="lasso">loop(-to=100, -from=1, -by=2) => {^
loop_count
'\r' // for formatting
^}</langsyntaxhighlight>
 
=={{header|Liberty BASICLDPL}}==
<syntaxhighlight lang="ldpl"># Display the even numbers up to twenty.
<lang lb>
 
for i = 2 to 8 step 2
data:
print i; ", ";
i is number
next i
 
print "who do we appreciate?"
procedure:
end
for i from 0 to 21 step 2 do
</lang>
display i lf
repeat</syntaxhighlight>
{{out}}
<pre>
0
2
4
6
8
10
12
14
16
18
20
</pre>
 
=={{header|LIL}}==
The '''inc''' command accepts a value to add to the variable, 1 if not specified.
<syntaxhighlight lang="tcl">for {set i 1} {$i < 15} {inc i 3} {print $i}</syntaxhighlight>
{{out}}
<pre># for {set i 1} {$i < 15} {inc i 3} {print $i}
1
4
7
10
13
#</pre>
 
=={{header|Lingo}}==
Lingo loops don't support a "step" parameter, so it has to be implemented manually:
<langsyntaxhighlight lang="lingo">step = 3
repeat with i = 0 to 10
put i
i = i + (step-1)
end repeat</langsyntaxhighlight>
{{out}}
<pre>
Line 1,031 ⟶ 1,805:
 
=={{header|Lisaac}}==
<langsyntaxhighlight Lisaaclang="lisaac">1.to 9 by 2 do { i : INTEGER;
i.print;
'\n'.print;
};</langsyntaxhighlight>
 
=={{header|LiveCode}}==
<langsyntaxhighlight LiveCodelang="livecode">repeat with n = 0 to 10 step 2
put n after loopn
if n is not 10 then put comma after loopn
end repeat
put loopn</langsyntaxhighlight>
Output<syntaxhighlight lang LiveCode="livecode">0,2,4,6,8,10</langsyntaxhighlight>
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">for [i 2 8 2] [type :i type "|, |] print [who do we appreciate?]</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">
for i=2,9,2 do
print(i)
end
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,060 ⟶ 1,834:
6
8
</pre>
 
=={{header|M2000 Interpreter}}==
===A for loop===
Str$(i) always return decimal separator as "."
format$() use same as Locale number specify. So here we use "," from Locale 1036. Str$() place a space before number if it is positive. We can use str$(i, "") to trim lead space. Here we use a space in format$ before number (and for negative numbers)
 
For this task we use single float numbers, and we make the loop one time from lower to higher value, and one time form higher to lower value.
 
<syntaxhighlight lang="m2000 interpreter">
Module LoopFor {
Locale 1036
Document doc$
\\ define i as a single
def single i
for i=1 to 21 step 5/3
Print i
doc$=format$(" {0}", i)
next i
doc$={
}
\\ make i as a single
for i=21 to 1 step 5/3
Print i
doc$=format$(" {0}", i)
next i
clipboard doc$
report doc$
}
LoopFor
</syntaxhighlight>
{{Out}}
<pre>
1 2,66667 4,33333 6 7,66667 9,33333 11 12,66667 14,33333 16 17,66667 19,33333 21
21 19,33333 17,66667 16 14,33334 12,66667 11 9,33333 7,66667 6 4,33333 2,66667 1
</pre>
===Iterator step 2===
<syntaxhighlight lang="m2000 interpreter">
a=("A", "B", "C", "D", "E", "F", "Z")
k=Each(a)
While k {
Print Array$(k),
k=Each(a, k^+2) ' set start again
}
Print
\\ a list of keys (unique keys allowed)
Inventory b="A", "B", "C", "D", "E", "F", "Z"
k=Each(b)
While k {
Print Eval$(k), ' return keys as values, because no value exist yet for each key.
k=Each(b, k^+2)
}
Print
</syntaxhighlight>
{{out}}
<pre>
A C E Z
A C E Z
</pre>
 
=={{header|M4}}==
<langsyntaxhighlight M4lang="m4">define(`for',
`ifelse($#,0,``$0'',
`ifelse(eval($2<=$3),1,
Line 1,069 ⟶ 1,901:
 
for(`x',`1',`5',`3',`x
')</lang>
</syntaxhighlight>
 
{{out}}
Line 1,078 ⟶ 1,911:
 
=={{header|Maple}}==
<langsyntaxhighlight Maplelang="maple">for i from 2 to 8 by 2 do
i;
end do;</langsyntaxhighlight>
{{out}}
<pre>
Line 1,089 ⟶ 1,922:
</pre>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">Do[
<lang Mathematica>Do[
Print@[i],
{i, 1, 20, 4}]</langsyntaxhighlight>
 
{{out}}
<pre>1
Line 1,099 ⟶ 1,931:
9
13
17</pre>
</pre>
 
=={{header|MATLAB}} / {{header|Octave}}==
 
<langsyntaxhighlight Matlablang="matlab"> for k = 0:10:100,
printf('%d\n',k)
end; </langsyntaxhighlight>
 
A vectorized version of the code is
 
<langsyntaxhighlight Matlablang="matlab"> printf('%d\n',0:10:100); </langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">for i: 1 step 2 thru 10 do print(i);
/* 1
3
5
7 */</langsyntaxhighlight>
 
=={{header|MAXScript}}==
<langsyntaxhighlight MAXScriptlang="maxscript">for i = 0 to 10 by 2 do format "%\n" i</langsyntaxhighlight>
Output:
<syntaxhighlight lang="maxscript">
<lang MAXScript>
0
2
Line 1,129 ⟶ 1,961:
10
OK
</syntaxhighlight>
</lang>
 
=={{header|min}}==
Printing the even numbers in <tt>[0,10)</tt>:
{{works with|min|0.19.6}}
<syntaxhighlight lang="min">0 (dup 10 >=) 'pop (puts 2 +) () linrec</syntaxhighlight>
 
=={{header|MiniScript}}==
<syntaxhighlight lang="miniscript">for i in range(1,20,4)
print i
end for</syntaxhighlight>
 
{{out}}
<pre>1
5
9
13
17</pre>
 
=={{header|МК-61/52}}==
<syntaxhighlight lang="text">1 П0 ИП0 3 + П0 1 0 - x#0
02 С/П</langsyntaxhighlight>
 
In this example, the step is 3, the lowest value is 1 and the upper limit is 10.
 
=={{header|Modula-2}}==
<langsyntaxhighlight lang="modula2">MODULE ForBy;
IMPORT InOut;
 
Line 1,149 ⟶ 1,998:
InOut.WriteLn
END
END ForBy.</langsyntaxhighlight>
 
=={{header|Modula-3}}==
<langsyntaxhighlight lang="modula3">FOR i := 1 TO 100 BY 2 DO
IO.Put(Fmt.Int(i) & " ");
END;</langsyntaxhighlight>
 
=={{header|MUMPS}}==
<langsyntaxhighlight MUMPSlang="mumps">FOR I=65:3:122 DO
.WRITE $CHAR(I)," "</langsyntaxhighlight>
{{out}}
<pre>A D G J M P S V Y \ _ b e h k n q t w z</pre>
 
=={{header|NewLISP}}==
<lang NewLISP>(for (i 0 10 2)
(println i))</lang>
 
=={{header|Nim}}==
<lang nim>for x in countdown(10,0,3): echo(x)</lang>
{{out}}
<pre>10
7
4
1</pre>
 
=={{header|Nemerle}}==
<langsyntaxhighlight Nemerlelang="nemerle">for (i = 2; i <= 8; i +=2)</langsyntaxhighlight>
<langsyntaxhighlight Nemerlelang="nemerle">foreach (i in [2, 4 .. 8])</langsyntaxhighlight>
 
=={{header|NetRexx}}==
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref savelog symbols nobinary
 
Line 1,188 ⟶ 2,025:
say i_.format(3, 1) || '\0'
end i_
say</langsyntaxhighlight>
{{out}}
<pre>D:\>java lst
Line 1,194 ⟶ 2,031:
Loops/For with a specified step
-1.4 0.3 2.0 3.7 5.4 7.1 8.8 10.5</pre>
 
=={{header|Never}}==
 
The increment step of the Never ''for'' expression can be simple or complex and need not be contiguous.
 
<syntaxhighlight lang="fsharp">for (i = 0; i < 10; i += 3)</syntaxhighlight>
 
=={{header|NewLISP}}==
<syntaxhighlight lang="newlisp">(for (i 0 10 2)
(println i))</syntaxhighlight>
 
=={{header|Nim}}==
<syntaxhighlight lang="nim">
 
for n in 5 .. 9: # 5 to 9 (9-inclusive)
echo n
 
echo "" # spacer
 
for n in 5 ..< 9: # 5 to 9 (9-exclusive)
echo n
 
echo "" # spacer
 
for n in countup(0, 16, 4): # 0 to 16 step 4
echo n
 
echo "" # spacer
 
for n in countdown(16, 0, 4): # 16 to 0 step -4
echo n
 
</syntaxhighlight>
{{out}}
<pre>
5
6
7
8
9
 
5
6
7
8
 
0
4
8
12
16
 
16
12
8
4
0
</pre>
 
=={{header|N/t/roff}}==
Works with gnu nroff. Example from groff manual, with minimal modifications.
<syntaxhighlight lang="nroff">
.nr a 0 3
.while (\na < 19) \{\
\n+a
.\}
</syntaxhighlight>
{{out}}
<pre>3 6 9 12 15 18 21
</pre>
 
=={{header|Nu}}==
Here <code>each {}</code> is used to convert from a range to a list, so that it can be consumed by <code>every</code>
<syntaxhighlight lang="nu">
for i in (0..10 | each {} | every 2) {print $i}
</syntaxhighlight>
{{out}}
<pre>
0
2
4
6
8
10
</pre>
 
=={{header|Oberon-2}}==
Works with oo2c Version 2
<langsyntaxhighlight lang="oberon2">
MODULE LoopForStep;
IMPORT
Line 1,212 ⟶ 2,134:
END
END LoopForStep.
</syntaxhighlight>
</lang>
Output:
<pre>
Line 1,224 ⟶ 2,146:
1
</pre>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
for(i := 0; i < 10; i += 2;) {
i->PrintLine();
};
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml"># let for_step a b step fn =
let rec aux i =
if i <= b then begin
Line 1,249 ⟶ 2,172:
6
8
- : unit = ()</langsyntaxhighlight>
 
=={{header|Octave}}==
<langsyntaxhighlight lang="octave">for i = 1:2:10
disp(i)
endfor</langsyntaxhighlight>
 
=={{header|Oforth}}==
 
<langsyntaxhighlight Oforthlang="oforth"> 1 100 2 step: i [ i println ]</langsyntaxhighlight>
 
=={{header|Openscad}}==
 
<langsyntaxhighlight lang="openscad">/* Loop from 3 to 9 in steps of 2 */
 
for ( l = [3:2:9] ) {
echo (l);
}
echo ("on a double white line.");</langsyntaxhighlight>
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">for I in 2..8;2 do
{System.show I}
end
{System.show done}
</syntaxhighlight>
</lang>
 
=={{header|PARI/GP}}==
<lang parigp>forstep(n=1,10,2,print(n))</lang>
 
The <code>forstep</code> construct is actually more powerful.
For example, to print numbers with last digit relatively prime to 10:
<lang parigp>forstep(n=1,100,[2,4,2,2],print(n))</lang>
 
=={{header|Panda}}==
Panda doesn't nativlynatively have a number generator with steps, so let's add it.
<langsyntaxhighlight lang="panda">fun for(from,to,step) type integer,integer,integer->integer
t=to.minus(from).divide(step)
0..t.times(step).plus(from)
/test it for(1 6 2) -> 1 3 5
 
for(1 3 5)</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
<syntaxhighlight lang="parigp">forstep(n=1,10,2,print(n))</syntaxhighlight>
 
The <code>forstep</code> construct is actually more powerful.
For example, to print numbers with last digit relatively prime to 10:
<syntaxhighlight lang="parigp">forstep(n=1,100,[2,4,2,2],print(n))</syntaxhighlight>
 
=={{header|Pascal}}==
Line 1,296 ⟶ 2,219:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">for($i=2; $i <= 8; $i += 2) {
print "$i, ";
}
print "who do we appreciate?\n";</langsyntaxhighlight>
 
=={{header|Perl 6Phix}}==
{libheader|Phix/basics}}
{{works with|Rakudo|2010.07}}
<!--<syntaxhighlight lang="phix">-->
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span> <span style="color: #008080;">to</span> <span style="color: #000000;">8</span> <span style="color: #008080;">by</span> <span style="color: #000000;">2</span> <span style="color: #008080;">do</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%d, "</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"who do we appreciate?\n"</span><span style="color: #0000FF;">)</span>
<!--</syntaxhighlight>-->
 
=={{header|Phixmonti}}==
With at least two values on the left-hand side, the sequence operator (<code>...</code>) can infer an arithmetic series. (With at least three values, it can infer a geometric sequence, too.)
<syntaxhighlight lang="Phixmonti">/# Rosetta Code problem: https://rosettacode.org/wiki/Loops/For_with_a_specified_step
by Galileo, 11/2022 #/
 
include ..\Utilitys.pmt
<lang perl6>for 2, 4 ... 8 {
print "$_, ";
}
say 'whom do we appreciate?';</lang><!-- "Whom" is infinitely more amusing. -->
 
( 2 8 2 ) for print ", " print endfor
=={{header|Phix}}==
"who do we appreciate?" print</syntaxhighlight>
<lang Phix>for i=2 to 8 by 2 do
{{out}}
printf(1,"%d, ",i)
<pre>2, 4, 6, 8, who do we appreciate?
end for
=== Press any key to exit ===</pre>
printf(1,"who do we appreciate?\n")</lang>
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php"><?php
foreach (range(2, 8, 2) as $i)
echo "$i, ";
echo "who do we appreciate?\n";
?></langsyntaxhighlight>
{{out}}
<pre>2, 4, 6, 8, who do we appreciate?</pre>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(for (N 1 (> 10 N) (+ N 2))
(printsp N) )</langsyntaxhighlight>
 
=={{header|Pike}}==
<langsyntaxhighlight lang="pike">int main() {
for(int i = 2; i <= 16; i=i+2) {
write(i + "\n");
}
}</langsyntaxhighlight>
 
=={{header|PILOT}}==
One of the advantages of needing to create loops manually by using conditional jumps is that a step of any integer is just as easy as a step of one.
<langsyntaxhighlight lang="pilot">R : Prints the odd numbers less than 10.
C :i = 1
*Loop
Line 1,346 ⟶ 2,273:
C :i = i + 2
J ( i < 10 ) :*Loop
END:</langsyntaxhighlight>
 
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
<lang PL/I>
declare (n, i) fixed binary;
 
Line 1,356 ⟶ 2,283:
put skip list (i);
end;
</syntaxhighlight>
</lang>
 
=={{header|Plain English}}==
Plain English has only one type of loop: an infinite loop that can be given a conditional break or exit. So there is nothing particularly special about this.
<syntaxhighlight lang="plainenglish">
To run:
Start up.
Put 0 into a number.
Loop.
If the number is greater than 50, break.
Convert the number to a string.
Write the string to the console.
Add 5 to the number.
Repeat.
Wait for the escape key.
Shut down.</syntaxhighlight>
 
=={{header|PowerShell}}==
<langsyntaxhighlight lang="powershell">for ($i = 0; $i -lt 10; $i += 2) {
$i
}</langsyntaxhighlight>
 
=={{header|PureBasicProlog}}==
If you need a stepping iterator, write one:
<lang PureBasic>For i=-15 To 25 Step 5
<syntaxhighlight lang="prolog">for(Lo,Hi,Step,Lo) :- Step>0, Lo=<Hi.
Debug i
for(Lo,Hi,Step,Val) :- Step>0, plus(Lo,Step,V), V=<Hi, !, for(V,Hi,Step,Val).
Next i</lang>
 
example :-
for(0,10,2,Val), write(Val), write(' '), fail.
example.</syntaxhighlight>
<pre>?- example.
0 2 4 6 8 10
true.</pre>
Adding the following two rules lets you go backwards too:
<syntaxhighlight lang="prolog">for(Hi,Lo,Step,Hi) :- Step<0, Lo=<Hi.
for(Hi,Lo,Step,Val) :- Step<0, plus(Hi,Step,V), Lo=<V, !, for(V,Lo,Step,Val).</syntaxhighlight>
 
=={{header|Python}}==
{{works with|Python|2.x}}
<langsyntaxhighlight lang="python">for i in xrange(2, 9, 2):
print "%d," % i,
print "who do we appreciate?"</langsyntaxhighlight>
 
{{works with|Python|3.x}}
<langsyntaxhighlight lang="python">for i in range(2, 9, 2):
print("%d, " % i, end="")
print("who do we appreciate?")</langsyntaxhighlight>
 
{{out}}
<pre>2, 4, 6, 8, who do we appreciate?</pre>
 
=={{header|Quackery}}==
 
The step size is specified within the loop, giving many possibilities.
 
<syntaxhighlight lang="quackery">
20 times [ i^ echo sp
2 step ]
cr
1024 times [ i^ 1+ echo sp
i^ 1+ step ]
cr
1 56 times [ i^ echo sp
i^ swap step ]
cr</syntaxhighlight>
 
{{Out}}
 
<pre>0 2 4 6 8 10 12 14 16 18
1 2 4 8 16 32 64 128 256 512 1024
0 1 1 2 3 5 8 13 21 34 55
</pre>
 
=={{header|R}}==
<langsyntaxhighlight Rlang="r">for(a in seq(2,8,2)) {
cat(a, ", ")
}
cat("who do we appreciate?\n")</langsyntaxhighlight>
 
Here the loop may be done implicitly by first concatenating the string and then printing:
 
<langsyntaxhighlight Rlang="r">cat(paste(c(seq(2, 8, by=2), "who do we appreciate?\n"), collapse=", "))</langsyntaxhighlight>
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">
#lang racket
 
Line 1,400 ⟶ 2,374:
(printf "~a, " i))
(printf "who do we appreciate?~n")
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
{{works with|Rakudo|2010.07}}
 
Depending on how you define your terms, this task is either trivial or impossible in Raku. <code>for</code> in Raku doesn't have a step value, it's an iteration operator. It iterates through any iterable object passed to it and sets the topic variable to each iterated value in turn. If you close one eye and squint, I guess you could say it has a step value of 1 (or more accurately, Next) and that isn't really changeable. Whatever iterable you pass to it though can have pretty much any value in pretty much any order you desire, so effectively the "step" value is completely unconstrained.
 
Examples of iterables (not exhaustive):
* Things that do a positional role:
:* Array
:* List
:* Range
:* Sequence
* Things that do an associative role:
:* Bag
:* BagHash
:* Hash
:* Map
:* Mix
:* MixHash
:* QuantHash
:* Set
:* SetHash
 
 
Probably the most straightforward way to do this is with a sequence. With at least two values on the left-hand side, the sequence operator (<code>...</code>) can infer an arithmetic series. (With at least three values, it can infer a geometric sequence, too.)
 
<syntaxhighlight lang="raku" line>for 2, 4 ... 8 {
print "$_, ";
}
say 'whom do we appreciate?';</syntaxhighlight><!-- "Whom" is infinitely more amusing. -->
 
But there is nothing constraining the sequence to a constant step. Here's one with a ''random'' step.
 
<syntaxhighlight lang="raku" line>.say for rand, *+rand-.5 ... *.abs>2</syntaxhighlight>
 
{{out|Sample output}}
<pre>0.1594860240843563
-0.11336537297314198
-0.04195945218519992
-0.024844489074366427
-0.20616093727620433
-0.17589258387167517
-0.40547336592612593
0.04561929494516015
0.4886003890463373
0.7843094215547495
0.6413619589945883
1.0694380727281951
1.472290164849169
1.8310404939418325
2.326272380988639
</pre>
 
For that matter, the iterated object doesn't need to contain numbers.
 
<syntaxhighlight lang="raku" line>.say for <17/32 π banana 👀 :d(7) 🦋>;</syntaxhighlight>
 
=={{header|Raven}}==
List of numbers:
<langsyntaxhighlight Ravenlang="raven">[ 2 4 6 8 ] each "%d, " print
"who do we appreciate?\n" print</langsyntaxhighlight>
 
Range:
<langsyntaxhighlight Ravenlang="raven">2 10 2 range each "%d, " print
"who do we appreciate?\n" print</langsyntaxhighlight>
{{out}}
<pre>2, 4, 6, 8, who do we appreciate?
Line 1,415 ⟶ 2,447:
 
=={{header|REBOL}}==
<langsyntaxhighlight REBOLlang="rebol">for i 2 8 2 [
prin rejoin [i ", "]]
print "who do we appreciate?"</langsyntaxhighlight>
 
{{out}}
<pre>2, 4, 6, 8, who do we appreciate?</pre>
 
 
=={{header|REXX}}==
===version 1===
<langsyntaxhighlight lang="rexx"> do x=1 to 10 by 1.5
say x
end</langsyntaxhighlight>
{{out}}
<pre>
Line 1,440 ⟶ 2,471:
 
===version 2===
<langsyntaxhighlight lang="rexx"> do thing=1 by 3/2 to 10
say thing
end</langsyntaxhighlight>
'''output''' is the same as above.
<br><br>
 
===version 3===
<langsyntaxhighlight lang="rexx">Do v=1 by 3/2 While v**2<30
Say v
End
Say '('v'**2) is greater than 30 (30.25)'</langsyntaxhighlight>
{{output}}
<pre>1
Line 1,460 ⟶ 2,491:
we use step keyword to define step length
in this example we print Even numbers between 0 and 10
<langsyntaxhighlight lang="ring">
for i = 0 to 10 step 2 see i + nl next
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,474 ⟶ 2,505:
 
we can use step with double values as well:
<langsyntaxhighlight lang="ring">
for i = 0 to 10 step 0.5 see i + nl next
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,502 ⟶ 2,533:
</pre>
 
=={{header|RPL}}==
Specific increment is given as an argument to the <code>STEP</code> instruction at the end of each loop. Usually, it is a constant value, but it could be a variable if it makes sense.
≪ 1 10 '''FOR''' j
j
2 '''STEP'''
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">2.step(8,2) {|n| print "#{n}, "}
puts "who do we appreciate?"</langsyntaxhighlight>
or:
<langsyntaxhighlight lang="ruby">(2..8).step(2) {|n| print "#{n}, "}
puts "who do we appreciate?"</langsyntaxhighlight>
or:
<langsyntaxhighlight lang="ruby">for n in (2..8).step(2)
print "#{n}, "
end
puts "who do we appreciate?"</langsyntaxhighlight>
or:
<syntaxhighlight lang="ruby">for n in 2.step(by: 2, to: 8)
print "#{n}, "
end
puts "who do we appreciate?"</syntaxhighlight>
{{out}}
<pre>
2, 4, 6, 8, who do we appreciate?
</pre>
 
=={{header|Run BASIC}}==
<lang runbasic>for i = 2 to 8 step 2
print i; ", ";
next i
print "who do we appreciate?"</lang>
{{out}}
<pre>2, 4, 6, 8, who do we appreciate?</pre>
 
=={{header|Rust}}==
 
<lang rust>fn main() {
For Rust 1.28 and later:
<syntaxhighlight lang="rust">fn main() {
for i in (2..=8).step_by(2) {
print!("{}", i);
}
println!("who do we appreciate?!");
}</syntaxhighlight>
 
An alternative which also works in earlier versions of Rust:
<syntaxhighlight lang="rust">fn main() {
let mut i = 2;
while i <= 8 {
Line 1,534 ⟶ 2,578:
}
println!("who do we appreciate?!");
}</langsyntaxhighlight>
 
Prettier, but currently feature gated version (Rust 1.0)
 
'''Does not work in stable Rust'''
<lang rust>#![feature(step_by)]
 
fn main() {
for i in (2..8+1).step_by(2) {
print!("{}", i);
}
println!("who do we appreciate?!");
}</lang>
Additionally, there is a crate on crates.io called [https://crates.io/crates/cfor cfor] which allows for the use of a C-like for loop.
<lang rust> #[macro_use]
extern crate cfor;
 
fn main() {
cfor!(let mut i = 2; i <= 8; i+=2; {
println!("{}", i);
});
println!("Who do we appreciate?");
}</lang>
 
=={{header|Salmon}}==
<langsyntaxhighlight Salmonlang="salmon">for (x; 2; x <= 8; 2)
print(x, ", ");;
print("who do we appreciate?\n");</langsyntaxhighlight>
 
=={{header|SAS}}==
<langsyntaxhighlight lang="sas">data _null_;
do i=1 to 10 by 2;
put i;
end;
run;</langsyntaxhighlight>
 
=={{header|Sather}}==
See [[Loops/For#Sather]]: the implementation for <code>for!</code> allows to specify a step, even though the built-in <code>stepto!</code> can be used; an example of usage could be simply:
<langsyntaxhighlight lang="sather"> i :INT;
loop
i := for!(1, 50, 2);
Line 1,578 ⟶ 2,600:
-- i := 1.stepto!(50, 2);
#OUT + i + "\n";
end;</langsyntaxhighlight>
 
(Print all odd numbers from 1 to 50)
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">for (i <- 2 to 8 by 2) println(i)</langsyntaxhighlight>
 
Alternatively:
<langsyntaxhighlight lang="scala">(2 to 8 by 2) foreach println</langsyntaxhighlight>
 
=={{header|Scheme}}==
The built-in ''for''-like form in Scheme is the ''do'' form:
 
<langsyntaxhighlight lang="scheme">(do ((i 2 (+ i 2))) ; list of variables, initials and steps -- you can iterate over several at once
((>= i 9)) ; exit condition
(display i) ; body
(newline))</langsyntaxhighlight>
 
Some people prefer to use the recursive-style and more flexible _named let_ form:
 
<langsyntaxhighlight lang="scheme">(let loop ((i 2)) ; function name, parameters and starting values
(cond ((< i 9)
(display i)
(newline)
(loop (+ i 2)))))) ; tail-recursive call, won't create a new stack frame</langsyntaxhighlight>
 
You can add to the language by wrapping the loop in a function:
 
<langsyntaxhighlight lang="scheme">(define (for-loop start end step func)
(let loop ((i start))
(cond ((< i end)
Line 1,615 ⟶ 2,637:
(lambda (i)
(display i)
(newline)))</langsyntaxhighlight>
 
... or in a macro, which allows for making the <code>(lambda)</code> implicit:
 
<langsyntaxhighlight lang="scheme">(define-syntax for-loop
(syntax-rules ()
((for-loop index start end step body ...)
Line 1,629 ⟶ 2,651:
(for-loop i 2 9 2
(display i)
(newline))</langsyntaxhighlight>
 
{{out}}
Line 1,639 ⟶ 2,661:
=={{header|Scilab}}==
{{works with|Scilab|5.5.1}}
<syntaxhighlight lang="text">for i=1:2:10
printf("%d\n",i)
end</langsyntaxhighlight>
{{out}}
<pre>1
Line 1,650 ⟶ 2,672:
 
=={{header|Seed7}}==
<syntaxhighlight lang="python">
<lang seed7>$ include "seed7_05.s7i";
$ include "seed7_05.s7i";
 
const proc: main is func
Line 1,656 ⟶ 2,679:
var integer: number is 0;
begin
for number range 10 to 10 step 2 do # 10 is inclusive
writeln(number);
end for;
 
end func;</lang>
writeln; # spacer
for number range 10 downto 0 step 2 do
writeln(number);
end for;
end func;
 
</syntaxhighlight>
{{out}}
<pre>
0
2
4
6
8
10
 
10
8
6
4
2
0
</pre>
 
=={{header|Sidef}}==
 
'''for(;;)''' loop:
<langsyntaxhighlight lang="ruby">for (var i = 2; i <= 8; i += 2) {
say i
}</langsyntaxhighlight>
 
'''for-in''' loop:
<langsyntaxhighlight lang="ruby">for i in (2 .. (8, 2)) {
say i
}</langsyntaxhighlight>
 
'''.each''' method:
<langsyntaxhighlight lang="ruby">2.to(8).by(2).each { |i|
say i
}</langsyntaxhighlight>
 
=={{header|Simula}}==
<langsyntaxhighlight lang="simula">begin
integer i;
for i:=5 step 5 until 25 do outint(i, 5)
end</langsyntaxhighlight>
 
=={{header|Slate}}==
<langsyntaxhighlight lang="slate">2 to: 8 by: 2 do: [| :i | Console ; i printString ; ', '].
inform: 'enough with the cheering already!'.</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
<langsyntaxhighlight lang="smalltalk">2 to: 8 by: 2 do: [ :i |
Transcript show: i; show ', '
].
Transcript showCr: 'enough with the cheering already!'</langsyntaxhighlight>
 
=={{header|Spin}}==
{{works with|BST/BSTC}}
{{works with|FastSpin/FlexSpin}}
{{works with|HomeSpun}}
{{works with|OpenSpin}}
<syntaxhighlight lang="spin">con
_clkmode = xtal1 + pll16x
_clkfreq = 80_000_000
 
obj
ser : "FullDuplexSerial.spin"
 
pub main | n
ser.start(31, 30, 0, 115200)
 
repeat n from 0 to 19 step 3
ser.dec(n)
ser.tx(32)
 
waitcnt(_clkfreq + cnt)
ser.stop
cogstop(0)</syntaxhighlight>
{{out}}
<pre>
0 3 6 9 12 15 18
</pre>
 
=={{header|SPL}}==
<langsyntaxhighlight lang="spl">> n, 1..10,2
#.output(n)
<</langsyntaxhighlight>
 
=={{header|SSEM}}==
Implementing loops with a step other than one is precisely as easy (or as fiddly) as implementing loops with a step equal to one. This example program uses a loop to perform integer division. It should be run with the dividend in storage location 21 and the divisor in storage location 22. To show that it works, we shall ask the machine to count from 387 in steps of -5 and to halt with the accumulator showing the number of times it has done so before producing a negative result.
<langsyntaxhighlight lang="ssem">10101000000000100000000000000000 0. -21 to c
00101000000001100000000000000000 1. c to 20
00101000000000100000000000000000 2. -20 to c
Line 1,725 ⟶ 2,800:
10100000000000000000000000000000 22. 5
00000000000000000000000000000000 23. 0
10110000000000000000000000000000 24. 13</langsyntaxhighlight>
After executing 1,012 instructions, the computer halts with the correct quotient—77—in the accumulator.
 
=={{header|Stata}}==
<langsyntaxhighlight lang="stata">forvalues i=1(2)10 {
display "`i'"
}
Line 1,737 ⟶ 2,812:
5
7
9</langsyntaxhighlight>
 
=={{header|Swift}}==
This prints all odd digits:
<langsyntaxhighlight lang="swift">for i in 1.stride(from: 1, to: 10, by: 2) {
print(i)
}</langsyntaxhighlight>
Alternately (removed in Swift 3):
<langsyntaxhighlight lang="swift">for var i = 1; i < 10; i += 2 {
print(i)
}</langsyntaxhighlight>
 
=={{header|Tailspin}}==
Tailspin uses streams not loops
<syntaxhighlight lang="tailspin">
1..9:3 -> !OUT::write
</syntaxhighlight>
{{out}}
<pre>
147
</pre>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">for {set i 2} {$i <= 8} {incr i 2} {
puts -nonewline "$i, "
}
puts "enough with the cheering already!"</langsyntaxhighlight>
 
=={{header|TI-83 BASIC}}==
Prints numbers from 0 to 100 stepping by 5.
<lang ti83b>:For(I,0,100,5
:Disp I
:End</lang>
 
=={{header|TI-89 BASIC}}==
<lang ti89b>Local i
For i, 0, 100, 5
Disp i
EndFor</lang>
 
=={{header|TorqueScript}}==
 
<langsyntaxhighlight TorqueScriptlang="torquescript">for(%i = 0; %i < 201; %i += 2)
{
echo(%i);
}</langsyntaxhighlight>
 
=={{header|TUSCRIPT}}==
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
LOOP i=2,9,2
PRINT i
ENDLOOP
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,792 ⟶ 2,866:
==={{header|Bourne Shell}}===
{{works with|Bourne Shell}}
<langsyntaxhighlight lang="bash">x=2
while test $x -le 8; do
echo $x
x=`expr $x + 2` || exit $?
done</langsyntaxhighlight>
 
{{works with|Bourne Shell}}
{{libheader|jot}}
<langsyntaxhighlight lang="bash">for x in `jot - 2 8 2`; do echo $x; done</langsyntaxhighlight>
 
==={{header|Korn Shellksh}}===
<syntaxhighlight lang="ksh">x=0
{{works with|Korn Shell}}
while (((x += 2) <= 8))
<lang bash>x=2
do
while [[$x -le 8]]; do
echoprint -r "$x"
done</syntaxhighlight>
((x=x+2))
{{works with|ksh93}}
done</lang>
<syntaxhighlight lang="ksh">for x in {2..8..2}
{{works with|Korn Shell}}
do
<lang bash>x=2
print -r "$x"
while ((x<=8)); do
done</syntaxhighlight>
echo $x
((x+=2))
done</lang>
 
===Bourne Again Shell===
{{works with|Bourne Again SHell|3}}
<langsyntaxhighlight lang="bash">for (( x=2; $x<=8; x=$x+2 )); do
printf "%d, " $x
done</langsyntaxhighlight>
 
{{works with|Bourne Again SHell|4}}
Bash v4.0+ has inbuilt support for setting up a step value
<langsyntaxhighlight lang="bash">for x in {2..8..2}
do
echo $x
done</langsyntaxhighlight>
 
==={{header|C Shell}}===
{{libheader|jot}}
<langsyntaxhighlight lang="csh">foreach x (`jot - 2 8 2`)
echo $x
end</langsyntaxhighlight>
 
=={{header|Ursa}}==
{{trans|Python}}
<langsyntaxhighlight lang="ursa">decl int i
for (set i 2) (< i 9) (set i (int (+ i 2)))
out i ", " console
end for
out "who do we appreciate?" endl console</langsyntaxhighlight>
 
=={{header|Vedit macro languageVala}}==
<syntaxhighlight lang="vala">for (int i = 1; i < 10; i += 2)
This prints all odd digits in range 1 to 9:
stdout.printf("%d\n", i);</syntaxhighlight>
<lang vedit>for (#1 = 1; #1 < 10; #1 += 2) {
 
Num_Type(#1)
=={{header|VAX Assembly}}==
}</lang>
<syntaxhighlight lang="vax assembly"> 0000 0000 1 .entry main,0
50 D4 0002 2 clrf r0 ;init to 0.0
0004 3 loop:
01 0004 4 nop ;do nothing
FFF9 50 0A 3E 4F 0005 5 acbf #112.0, #1.25, r0, loop ;limit, step
000B 6
04 000B 7 ret
000C 8 .end main</syntaxhighlight>
 
=={{header|VBA}}==
<langsyntaxhighlight lang="vb">Sub MyLoop()
For i = 2 To 8 Step 2
Debug.Print i;
Next i
Debug.Print
End Sub</langsyntaxhighlight>
{{out}}
<pre>
Line 1,862 ⟶ 2,941:
 
=={{header|VBScript}}==
<langsyntaxhighlight lang="vb">buffer = ""
For i = 2 To 8 Step 2
buffer = buffer & i & " "
Next
WScript.Echo buffer</langsyntaxhighlight>
{{out}}
<pre>2 4 6 8</pre>
 
=={{header|Vedit macro language}}==
This prints all odd digits in range 1 to 9:
<syntaxhighlight lang="vedit">for (#1 = 1; #1 < 10; #1 += 2) {
Num_Type(#1)
}</syntaxhighlight>
 
 
=={{header|Verilog}}==
Imprime todos los números impares
<syntaxhighlight lang="verilog">
module main;
integer i;
initial begin
 
for(i = 1; i <= 21; i = i + 2) $write(i);
$finish ;
end
endmodule
</syntaxhighlight>
 
 
=={{header|Vim Script}}==
<langsyntaxhighlight lang="vim">for i in range(2, 10, 2)
echo i
endfor</langsyntaxhighlight>
 
{{Out}}
Line 1,882 ⟶ 2,983:
10</pre>
 
=={{header|V (Vlang)}}==
This prints all odd digits:
<syntaxhighlight lang="v (vlang)">for i := 1; i<10; i+=2 {
println(i)
}</syntaxhighlight>
 
=={{header|Visual BasicVorpal}}==
<syntaxhighlight lang="vorpal">for(i = 2, i <= 8, i = i + 2){
{{works with|Visual Basic|VB6 Standard}}
i.print()
<lang vb>Sub MyLoop()
}</syntaxhighlight>
For i = 2 To 8 Step 2
 
Debug.Print i;
=={{header|Wart}}==
Next i
<syntaxhighlight lang="wart">for i 2 (i <= 8) (i <- i+2)
Debug.Print
prn i</syntaxhighlight>
End Sub</lang>
 
=={{header|Wren}}==
There is currently no direct way to incorporate a step into a ''for'' loop but we can simulate it by declaring a second variable at the start of the loop which maps the loop variable to the value we want or we can simply use a ''while'' loop instead.
<syntaxhighlight lang="wren">// Print odd numbers under 20.
for (i in 1..10) {
var j = 2*i - 1
System.write("%(j) ")
}
 
System.print("\n")
 
// Do the same using a 'while' loop.
var k = 1
while (k < 20) {
System.write("%(k) ")
k = k + 2
}
System.print()</syntaxhighlight>
{{out}}
<pre>
21 3 45 7 69 11 813 15 17 19
 
1 3 5 7 9 11 13 15 17 19
</pre>
<br>
{{libheader|Wren-iterate}}
A further and more general approach is to use a wrapper class (such as the one in the above module) which can iterate over any sequence in a stepped fashion using Wren's ''iterator protocol''.
<syntaxhighlight lang="wren">import "./iterate" for Stepped
 
// Print odd numbers under 20.
for (i in Stepped.new(1..20, 2)) System.write("%(i) ")
System.print()
 
// Print first plus every third element thereafter.
for (i in Stepped.new(1..20, 3)) System.write("%(i) ")
System.print()</syntaxhighlight>
 
=={{header|Visual Basic .NET}}==
{{works with|Visual Basic .NET|2011}}
<lang vbnet>Public Class FormPG
Private Sub FormPG_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim i As Integer, buffer As String
buffer = ""
For i = 2 To 8 Step 2
buffer = buffer & i & " "
Next i
Debug.Print(buffer)
End Sub
End Class</lang>
{{out}}
<pre>
1 3 5 7 9 11 13 15 17 19
2 4 6 8
1 4 7 10 13 16 19
</pre>
 
=={{header|Vorpal}}==
<lang vorpal>for(i = 2, i <= 8, i = i + 2){
i.print()
}</lang>
 
=={{header|Wart}}==
<lang wart>for i 2 (i <= 8) (i <- i+2)
prn i</lang>
 
=={{header|XPL0}}==
Line 1,927 ⟶ 3,045:
thus a step by 2 can be implemented like this:
 
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\codes;
int I;
[for I:= 2 to 8 do
Line 1,934 ⟶ 3,052:
];
Text(0, "who do we appreciate?");
]</langsyntaxhighlight>
 
{{out}}
Line 1,942 ⟶ 3,060:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">foreach n in ([1..10,4]) {println(n)}
[1..10,3].pump(Console.println)</langsyntaxhighlight>
{{out}}
<pre>
Line 1,956 ⟶ 3,074:
</pre>
A few others:
<langsyntaxhighlight lang="zkl">fcn loop(i=0){println(i); if(i<10)return(self.fcn(i+2))}
(0).pump(10,Console.println,fcn(n){if(n%2)return(Void.Skip); n})</langsyntaxhighlight>
 
=={{header|Zig}}==
<syntaxhighlight lang="zig">
const std = @import("std");
 
pub fn main() !void {
=={{header|ZX Spectrum Basic}}==
const stdout_wr = std.io.getStdOut().writer();
var i: u8 = 1;
while (i < 10) : (i += 2)
try stdout_wr.print("{d}\n", .{i});
}
</syntaxhighlight>
 
===With for-loop===
<lang basic>10 FOR l = 2 TO 8 STEP 2
<syntaxhighlight lang="zig">
20 PRINT l; ", ";
const std = @import("std");
30 NEXT l
const stdout = @import("std").io.getStdOut().writer();
40 PRINT "Who do we appreciate?"</lang>
 
pub fn main() !void {
{{omit from|GUISS}}
for (1..10) |n| {
if (n % 2 == 0) continue;
try stdout.print("{d}\n", .{n});
}
}
</syntaxhighlight>
{{out}}
<pre>
1
3
5
7
9
</pre>
19

edits