Loops/Do-while: Difference between revisions

m
 
(35 intermediate revisions by 17 users not shown)
Line 34:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">V val = 0
L
val++
print(val)
I val % 6 == 0
L.break</langsyntaxhighlight>
 
=={{header|360 Assembly}}==
;Basic
The WTO macro is in SYS1.MACLIB, which needs to be in the SYSLIB concatenation at assembly.
<langsyntaxhighlight lang="360asm">* Do-While
DOWHILE CSECT , This program's control section
BAKR 14,0 Caller's registers to linkage stack
Line 70:
WTOLEN DC H'2' fixed WTO length of two
WTOTXT DC CL2' '
END DOWHILE </langsyntaxhighlight>
;Structured Macros
Although specified at the beginning (DO UNTIL), the test is done at the end of the loop (ENDDO).
Structured macros (DO ENDDO) weren't in the 1963 standard of Assembler 360, but there are part of it since since 1998.
<langsyntaxhighlight lang="360asm">* Do-While 27/06/2016
DOWHILE CSECT
USING DOWHILE,12 set base register
Line 94:
DC H'0' must be zero
WTOTXT DS C one char
END DOWHILE</langsyntaxhighlight>
 
=={{header|6502 Assembly}}==
Code is called as a subroutine (i.e. JSR DoWhileSub). Specific OS/hardware routines for printing are left unimplemented.
<langsyntaxhighlight lang="6502asm">DoWhileSub: PHA
TYA
PHA ;push accumulator and Y register onto stack
Line 115:
TAY
PLA ;restore Y register and accumulator from stack
RTS ;return from subroutine</langsyntaxhighlight>
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program loopdowhile64.s */
Line 173:
.include "../includeARM64.inc"
 
</syntaxhighlight>
</lang>
 
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">Proc Main()
byte A
 
Line 186:
Until A Mod 6=0
Od
Return</langsyntaxhighlight>
 
=={{header|ActionScript}}==
<langsyntaxhighlight lang="actionscript">var val:int = 0;
do
{
trace(++val);
} while (val % 6);</langsyntaxhighlight>
 
=={{header|Ada}}==
<langsyntaxhighlight lang="ada">loop
Value := Value + 1;
Put (Value);
exit when Value mod 6 = 0;
end loop;</langsyntaxhighlight>
Here is an alternative version:
<langsyntaxhighlight lang="ada">for Value in 0..Integer'Last loop
Put (Value);
exit when Value mod 6 = 0;
end loop;</langsyntaxhighlight>
 
=={{header|Agena}}==
Tested with Agena 2.9.5 Win32
<langsyntaxhighlight lang="agena">scope
local i := 0;
do
Line 215:
print( i )
as ( i % 6 ) <> 0
epocs</langsyntaxhighlight>
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">integer a;
 
a = 0;
Line 225:
o_integer(a);
o_byte('\n');
} while (a % 6 != 0);</langsyntaxhighlight>
 
=={{header|ALGOL 60}}==
{{works with|ALGOL 60|OS/360}}
No structured control instructions in Algol 60 to perform this task. Use of 2 harmful GOTOs. I agree Edsger Dijkstra communication "Go To Statement Considered Harmful", ACM 1968.
<langsyntaxhighlight lang="algol60">'BEGIN' 'COMMENT' Loops DoWhile - Algol60 - 22/06/2018;
'INTEGER' I;
I:=0;
Line 239:
'GOTO' LOOP;
ENDLOOP:
'END'</langsyntaxhighlight>
{{out}}
<pre>
Line 248:
{{works with|A60}}
While "goto" may (oddly enough) actually be clearer in this particular context, it is possible to avoid it by using the for-while statement and a boolean flag to implement a test-at-the-bottom loop. (Note that though the A60 interpreter permits, it thankfully does not require, the ugly tick marks around reserved words which mar many (but not the Burroughs) ALGOL 60 translators.)
<langsyntaxhighlight lang="algol60">
begin
 
Line 263:
 
end
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 270:
 
=={{header|ALGOL 68}}==
<langsyntaxhighlight lang="algol68">FOR value WHILE
print(value);
# WHILE # value MOD 6 /= 0 DO
SKIP
OD</langsyntaxhighlight>
 
=={{header|ALGOL W}}==
<langsyntaxhighlight lang="algolw">begin
integer i;
i := 0;
Line 287:
end
do begin end
end.</langsyntaxhighlight>
 
=={{header|AmigaE}}==
<langsyntaxhighlight lang="amigae">PROC main()
DEF i = 0
REPEAT
Line 296:
WriteF('\d\n', i)
UNTIL Mod(i, 6) = 0
ENDPROC</langsyntaxhighlight>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>
 
/* ARM assembly Raspberry PI */
Line 442:
pop {r4, lr}
bx lr
</syntaxhighlight>
</lang>
 
=={{header|AppleScript}}==
<syntaxhighlight lang="applescript">
<lang AppleScript>
on printConsole(x)
return x as string
Line 456:
printConsole(table)
end repeat
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 470:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">value: 0
until [
value: value + 1
print value
] [ 0 = value%6 ]</langsyntaxhighlight>
 
{{out}}
Line 484:
5
6</pre>
 
=={{header|Asymptote}}==
Asymptote's control structures are similar to those in C, C++, or Java
<syntaxhighlight lang="asymptote">int i = 0;
do {
++i;
write(" ", i, suffix=none);
} while (i % 6 != 0);</syntaxhighlight>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">While mod(A_Index, 6) ;comment:everything but 0 is considered true
output = %output%`n%A_Index%
MsgBox % output</langsyntaxhighlight>
 
=={{header|AWK}}==
<langsyntaxhighlight lang="awk">BEGIN {
val = 0
do {
Line 497 ⟶ 505:
print val
} while( val % 6 != 0)
}</langsyntaxhighlight>
 
=={{header|Axe}}==
While Axe does not have explicit do-while loops, they can be easily emulated using an infinite loop with a conditional terminator:
<langsyntaxhighlight lang="axe">0→A
While 1
A++
Disp A▶Dec,i
End!If A^6</langsyntaxhighlight>
 
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
{{works with|QuickBasic|4.5}}
{{works with|JustCommodore BASIC}}
<syntaxhighlight lang="gwbasic"> 0 REMADE FOR DO WHILE
<lang qbasic>a = 0
1 DEF FN MOD6(N) = N - INT (N / 6) * 6
do
2 aLET V4LUE = a + 10
3 FOR DO = 0 TO 1
print a
10 LET V4LUE = V4LUE + 1
loop while a mod 6 <> 0</lang>
20 PRINT V4LUE" ";
30 WHILE = FN MOD6(V4LUE) < > 0:DO = NOT WHILE: NEXT</syntaxhighlight>
 
==={{header|ASIC}}===
ASIC does not have a <code>do .. while</code> construct. Equivalent using <code>WHILE</code>:
<langsyntaxhighlight lang="basic">
REM Loops/Do-while
 
Line 533 ⟶ 543:
 
END
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 544 ⟶ 554:
</pre>
Equivalent using conditional jump:
<langsyntaxhighlight lang="basic">
REM Loops/Do-while
 
Line 555 ⟶ 565:
 
END
</syntaxhighlight>
</lang>
{{out}}
As above
 
==={{header|BaCon}}===
<langsyntaxhighlight lang="freebasic">
a=0
REPEAT
Line 566 ⟶ 576:
PRINT a
UNTIL MOD(a,6) == 0
</syntaxhighlight>
</lang>
 
==={{header|BASIC256}}===
<langsyntaxhighlight BASIC256lang="basic256">i = 0
 
do
Line 576 ⟶ 586:
until i mod 6 = 0
print
end</langsyntaxhighlight>
 
==={{header|BBC BASIC}}===
<langsyntaxhighlight lang="bbcbasic">a = 0
REPEAT
a = a + 1
PRINT a
UNTIL a MOD 6 = 0</langsyntaxhighlight>
 
==={{header|Chipmunk Basic}}===
In ''Chipmunk Basic Man Page'', the words <code>do</code>, <code>loop</code>, and <code>until</code> are mentioned as reserved, but the <code>do .. loop until</code> statement is not described, probably because of uncorrected abnormal behavior of the interpreter. In case of such behavior you may use equivalents (e.g. with <code>while .. wend</code>).
<syntaxhighlight lang="basic">
100 rem Loops/Do-while
110 i = 0
120 do
130 i = i+1
140 print i
150 loop until i mod 6 = 0
160 end
</syntaxhighlight>
{{out}}
<pre>
1
2
3
4
5
6
</pre>
 
==={{header|Commodore BASIC}}===
<syntaxhighlight lang="basic">50 rem does not have do-while simultate using for-next
100 x=0
120 for b=-1 to 0 step 0
130 x=x+1
140 print x
150 b=x/6<>int(x/6)
160 next x
</syntaxhighlight>
 
==={{header|FreeBASIC}}===
<syntaxhighlight lang="freebasic">' FB 1.05. 0 Win64
 
Dim i As Integer = 0
Do
i += 1
Print i; " ";
Loop While i Mod 6 <> 0
Print
Sleep</syntaxhighlight>
{{out}}
<pre>
1 2 3 4 5 6
</pre>
 
==={{header|FutureBasic}}===
<syntaxhighlight lang="futurebasic">window 1
 
dim as long i
 
do
i++
print i
until ( i mod 6 == 0 )
 
HandleEvents</syntaxhighlight>
{{out}}
<pre>
1
2
3
4
5
6
</pre>
 
==={{header|Gambas}}===
'''[https://gambas-playground.proko.eu/?gist=57e91eab60baf7e39df9b6d16a0deddd Click this link to run this code]'''
<syntaxhighlight lang="gambas">Public Sub Main()
Dim siCount As Short
 
Repeat
Inc siCount
Print siCount;;
Until siCount Mod 6 = 0
 
End</syntaxhighlight>
{{out}}
<pre>
1 2 3 4 5 6
</pre>
 
==={{header|GW-BASIC}}===
GW-BASIC does not have a <code>do .. while</code> construct.
Equivalent using <code>WHILE</code>:
{{works with|BASICA}}
{{works with|PC-BASIC|any}}
<syntaxhighlight lang="gwbasic">
10 LET I% = 0
20 ' first iteration - before the WHILE
30 LET I% = I% + 1
40 PRINT I%
50 WHILE I% MOD 6 <> 0
60 LET I% = I% + 1
70 PRINT I%
80 WEND
</syntaxhighlight>
Equivalent using <code>GOTO</code>:
{{works with|BASICA}}
{{works with|PC-BASIC|any}}
<syntaxhighlight lang="gwbasic">
10 LET I% = 0
20 LET I% = I% + 1
30 PRINT I%
40 IF I% MOD 6 <> 0 THEN GOTO 20
</syntaxhighlight>
 
==={{header|IS-BASIC}}===
<langsyntaxhighlight ISlang="is-BASICbasic">100 LET I=0
110 DO
120 LET I=I+1
130 PRINT I
140 LOOP UNTIL MOD(I,6)=0</langsyntaxhighlight>
 
==={{header|Liberty BASIC}}===
{{works with|Just BASIC}}
<syntaxhighlight lang="lb">
a = 0
do
a = a + 1
print a
loop until (a mod 6) = 0
</syntaxhighlight>
See also [[#QBasic|QBasic]].
 
==={{header|Microsoft Small Basic}}===
Microsoft Small Basic does not have a <code>do .. while</code> construct.
Equivalent using <code>While</code>:
<syntaxhighlight lang="microsoftsmallbasic">
i = 0
' first iteration - before the While
i = i + 1
TextWindow.WriteLine(i)
While Math.Remainder(i, 6) <> 0
i = i + 1
TextWindow.WriteLine(i)
EndWhile
</syntaxhighlight>
Equivalent using <code>Goto</code>:
<syntaxhighlight lang="microsoftsmallbasic">
i = 0
loopStart:
i = i + 1
TextWindow.WriteLine(i)
If Math.Remainder(i, 6) <> 0 Then
Goto loopStart
EndIf
</syntaxhighlight>
 
==={{header|Minimal BASIC}}===
Minimal BASIC does not have a <code>do .. while</code> construct. Equivalent using conditional jump:
<langsyntaxhighlight lang="gwbasic">
10 REM Loops/Do-while
20 LET I=0
Line 601 ⟶ 754:
50 IF INT(I/6)*6 <> I THEN 30
60 END
</syntaxhighlight>
</lang>
 
==={{header|MSX Basic}}===
The [[#Minimal BASIC|Minimal BASIC]] solution works without any changes.
 
==={{header|NS-HUBASIC}}===
<syntaxhighlight lang="ns-hubasic">10 PRINT "NO,"A" ISN'T A MULTIPLE OF 6."
20 A=A+1
30 IF A-(A/6)*6<>0 THEN GOTO 10
40 PRINT "YES, 6 IS A MULTIPLE OF 6."</syntaxhighlight>
 
==={{header|PureBasic}}===
{{works with|PureBasic|4.41}}
<syntaxhighlight lang="purebasic">x=0
Repeat
x+1
Debug x
Until x%6=0</syntaxhighlight>
 
==={{header|QB64}}===
''CBTJD'': 2020/03/14
<syntaxhighlight lang="qbasic">DO
PRINT n
n = n + 1
LOOP WHILE n MOD 6 <> 0</syntaxhighlight>
 
<syntaxhighlight lang="qb64">
'Another demo of DO loops
Dim As Integer Counter
Print "First loop DO..LOOP UNTIL"
Counter = 0
Do
Print Counter
Counter = Counter + 1
Loop Until Counter Mod 6 = 0
Print "Counter Mod 6 = "; Counter Mod 6
Print "First loop DO WHILE..LOOP"
Counter = 1
Do While Counter Mod 6 <> 0
Print Counter
Counter = Counter + 1
Loop
Print "Counter Mod 6 = "; Counter Mod 6
End
</syntaxhighlight>
 
==={{header|QBasic}}===
{{works with|QBasic|1.1}}
{{works with|QuickBasic|4.5}}
{{works with|Just BASIC}}
<syntaxhighlight lang="qbasic">a = 0
DO
a = a + 1
PRINT a;
LOOP WHILE a MOD 6 <> 0</syntaxhighlight>
 
==={{header|Quite BASIC}}===
The [[#Minimal BASIC|Minimal BASIC]] solution works without any changes.
 
==={{header|Run BASIC}}===
Run Basic does not have a <code>do .. while</code> construct. Equivalent using conditional jump:
<syntaxhighlight lang="lb">i = 0
[start]
i = i +1
print i; " ";
if i mod 6 <> 0 then [start]</syntaxhighlight>
 
==={{header|Sinclair ZX81 BASIC}}===
<langsyntaxhighlight lang="basic">10 LET X=0
20 LET X=X+1
30 PRINT X
40 IF X/6<>INT (X/6) THEN GOTO 20</langsyntaxhighlight>
 
==={{Header|Tiny BASIC}}===
Tiny Basic does not have a <code>do .. while</code> construct. Equivalent using conditional jump:
{{works with|TinyBasic}}
<syntaxhighlight lang="basic">10 REM Loops/Do-while
20 LET I = 0
30 LET I = I + 1
40 PRINT I
50 IF (I / 6) * 6 <> I THEN GOTO 30
60 END</syntaxhighlight>
{{out}}
<pre>
1
2
3
4
5
6
</pre>
 
==={{header|True BASIC}}===
<langsyntaxhighlight lang="basic">LET i = 0
LET i = 0
 
DO
Line 618 ⟶ 854:
LOOP WHILE REMAINDER(i, 6) <> 0
PRINT
END</syntaxhighlight>
END
 
</lang>
==={{header|VBA}}===
<syntaxhighlight lang="vb">Public Sub LoopDoWhile()
Dim value As Integer
value = 0
Do
value = value + 1
Debug.Print value;
Loop While value Mod 6 <> 0
End Sub</syntaxhighlight>{{out}}<pre> 1 2 3 4 5 6 </pre>
 
==={{header|Visual Basic .NET}}===
<syntaxhighlight lang="vbnet">Dim i = 0
Do
i += 1
Console.WriteLine(i)
Loop Until i Mod 6 = 0</syntaxhighlight>
 
==={{header|XBasic}}===
{{works with|Windows XBasic}}
<syntaxhighlight lang="xbasic">
PROGRAM "dowhile"
 
DECLARE FUNCTION Entry()
 
FUNCTION Entry()
val% = 0
DO
INC val%
PRINT val%
LOOP WHILE val% MOD 6 <> 0 ' or LOOP UNTIL val% MOD 6 = 0
END FUNCTION
END PROGRAM
</syntaxhighlight>
 
==={{header|Yabasic}}===
<langsyntaxhighlight lang="yabasic">i = 0
repeat
Line 628 ⟶ 897:
print i, " ";
until mod(i, 6) = 0
print</langsyntaxhighlight>
 
=={{header|bc}}==
<langsyntaxhighlight lang="bc">i = 0
for (;;) {
++i /* increments then prints i */
if (i % 6 == 0) break
}
quit</langsyntaxhighlight>
 
=={{header|Befunge}}==
<langsyntaxhighlight lang="befunge">0>1+:.v
|%6: <
@</langsyntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">int val = 0;
do{
val++;
printf("%d\n",val);
}while(val % 6 != 0);</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
 
<langsyntaxhighlight lang="csharp">int a = 0;
 
do
Line 658 ⟶ 927:
a += 1;
Console.WriteLine(a);
} while (a % 6 != 0);</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">int val = 0;
do{
val++;
std::cout << val << std::endl;
}while(val % 6 != 0);</langsyntaxhighlight>
 
=={{header|C3}}==
In this example we use default zero initialization of locals in C3.
<syntaxhighlight lang="c3">int val;
do
{
io::printn(++val);
}
while (val % 6 != 0);</syntaxhighlight>
 
=={{header|Chapel}}==
<langsyntaxhighlight lang="chapel">var val = 0;
do {
val += 1;
writeln(val);
} while val % 6 > 0;</langsyntaxhighlight>
 
=={{header|ChucK}}==
<syntaxhighlight lang="text">
0 => int value;
do
Line 683 ⟶ 961:
}
while(value % 6 != 0);
</syntaxhighlight>
</lang>
 
=={{header|Clipper}}==
<langsyntaxhighlight lang="clipper"> Local n := 0
DO WHILE .T.
? ++n
Line 692 ⟶ 970:
EXIT
ENDIF
ENDDO</langsyntaxhighlight>
 
=={{header|Clojure}}==
<langsyntaxhighlight Clojurelang="clojure">(loop [i 0]
(let [i* (inc i)]
(println i*)
(when-not (zero? (mod i* 6))
(recur i*))))</langsyntaxhighlight>
 
=={{header|COBOL}}==
The COBOL equivalent of a do-while loop is <code>PERFORM WITH TEST AFTER UNTIL some-condition</code>.
<langsyntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. loop-do-while.
 
Line 717 ⟶ 995:
 
GOBACK
.</langsyntaxhighlight>
 
=={{header|Coco}}==
Do-while loops are a JavaScript feature removed in CoffeeScript but re-added in Coco.
 
<langsyntaxhighlight lang="coco">v = 0
do
console.log ++v
while v % 6</langsyntaxhighlight>
 
=={{header|CoffeeScript}}==
CoffeeScript doesn't have <code>do {} while ()</code> loop, but it can be emulated using <code>loop</code> statement and <code>break unless</code> statement.
<langsyntaxhighlight lang="coffeescript">val = 0
loop
console.log ++val
break unless val % 6</langsyntaxhighlight>
 
=={{header|ColdFusion}}==
<langsyntaxhighlight lang="cfm"><cfscript>
value = 0;
do
Line 742 ⟶ 1,020:
writeOutput( value );
} while( value % 6 != 0 );
</cfscript></langsyntaxhighlight>
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">(let ((val 0))
(loop do
(incf val)
(print val)
while (/= 0 (mod val 6))))</langsyntaxhighlight>
 
loop can set up temporary values, and incf returns a value, so it's also possible to do
 
<langsyntaxhighlight lang="lisp">(loop with val = 0
do (print (incf val))
until (= 0 (mod val 6)))</langsyntaxhighlight>
 
=== Using DO ===
<langsyntaxhighlight lang="lisp">
(do* ((a 0) ; Initialize to 0
(b (incf a) (incf b))) ; Set first increment and increment on every loop
((zerop (mod b 6)) (print b)) ; Break condition and print last value `6' (right?)
(print b)) ; On every loop print value
</syntaxhighlight>
</lang>
 
{{out}}
Line 776 ⟶ 1,054:
 
=={{header|D}}==
<langsyntaxhighlight lang="d">import std.stdio;
 
void main() {
Line 784 ⟶ 1,062:
write(val, " ");
} while (val % 6 != 0);
}</langsyntaxhighlight>
{{out}}
<pre>1 2 3 4 5 6 </pre>
 
=={{header|Dart}}==
<syntaxhighlight lang="dart">void main() {
int val = 0;
do {
val++;
print(val);
} while (val % 6 != 0);
}
</syntaxhighlight>
 
=={{header|dc}}==
{{trans|bc}}
<langsyntaxhighlight lang="dc">0 si [i = 0]sz
[2Q]sA [A = code to break loop]sz
[
Line 797 ⟶ 1,085:
6 % 0 =A [call A if 0 == it % 6]sz
0 0 =B [continue loop]sz
]sB 0 0 =B</langsyntaxhighlight>
 
=={{header|Delphi}}==
<langsyntaxhighlight Delphilang="delphi">program Loop;
 
{$APPTYPE CONSOLE}
Line 815 ⟶ 1,103:
Writeln;
Readln;
end.</langsyntaxhighlight>
 
=={{header|Draco}}==
<langsyntaxhighlight lang="draco">proc nonrec main() void:
byte i;
i := 0;
Line 826 ⟶ 1,114:
i % 6 ~= 0
do od
corp</langsyntaxhighlight>
{{out}}
<pre> 1 2 3 4 5 6</pre>
Line 832 ⟶ 1,120:
=={{header|Dragon}}==
 
<langsyntaxhighlight lang="dragon">val = 0
do{
val++
showln val
}while(val % 6 != 0)</langsyntaxhighlight>
 
=={{header|DUP}}==
Line 843 ⟶ 1,131:
A do-while loop is technically nothing more than executing the block once before running an ordinary while loop, so we simply define an operator or function that contains the block (comments in curly braces):
 
<langsyntaxhighlight DUPlang="dup">[1+$.' ,]⇒A {operator definition: PUSH 1, ADD, DUP, print top of stack to SDTOUT, print whitespace}
[1+$.' ,]a: {function definition}</langsyntaxhighlight>
 
and put the defined block in front of the while loop, and inside the while loop itself:
Line 850 ⟶ 1,138:
If the block was defined as an operator, the whole program would look like this (comments in curly braces):
 
<langsyntaxhighlight DUPlang="dup">[1+$.' ,]⇒A
0 A[$6/%][A]# {PUSH 0, execute operator A, [DUP, PUSH 6, MOD/DIV, POP][execute operator A]#}</langsyntaxhighlight>
 
And if the block is defined as a named function:
 
<langsyntaxhighlight DUPlang="dup">[1+$.' ,]a:
0 a;![$6/%][a;!]#</langsyntaxhighlight>
 
Result:
 
<syntaxhighlight lang DUP="dup">1 2 3 4 5 6</langsyntaxhighlight>
 
=={{header|DWScript}}==
<syntaxhighlight lang="delphi">
<lang Delphi>
var i := 0;
 
Line 870 ⟶ 1,158:
PrintLn(i);
until i mod 6 = 0;
</syntaxhighlight>
</lang>
'''Bold text'''
 
=={{header|Dyalect}}==
 
<langsyntaxhighlight lang="dyalect">var x = 0
 
do
Line 881 ⟶ 1,169:
x += 1
print(x)
} while x % 6 != 0</langsyntaxhighlight>
 
=={{header|E}}==
E does not have an official do-while construct, but the primitive which loops are built out of (which calls a function which returns a boolean indicating whether it should be called again) can be used to construct a do-while.
<langsyntaxhighlight lang="e">var x := 0
__loop(fn {
x += 1
println(x)
x % 6 != 0 # this is the return value of the function
})</langsyntaxhighlight>
 
<!-- XXX we should have an example of lambda-args sugar here -->
 
=={{header|EasyLang}}==
<syntaxhighlight>
value = 0
repeat
value += 1
print value
until value mod 6 = 0
.
</syntaxhighlight>
 
=={{header|Ela}}==
 
<langsyntaxhighlight lang="ela">open monad io
 
loop n | n % 6 == 0 = do return ()
Line 903 ⟶ 1,201:
loop (n+1)
 
_ = loop 10 ::: IO</langsyntaxhighlight>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">defmodule Loops do
def do_while(n) do
n1 = n + 1
Line 915 ⟶ 1,213:
end
 
Loops.do_while(0)</langsyntaxhighlight>
 
=={{header|Emacs Lisp}}==
The condition form for <code>while</code> can be a <code>progn</code> to evaluate arbitrary code before the loop condition. The body of a <code>while</code> can be empty.
 
<langsyntaxhighlight Lisplang="lisp">(let ((val 0))
(while (progn
(setq val (1+ val))
(message "%d" val)
(/= 0 (mod val 6)))))</langsyntaxhighlight>
 
Alternatively, the loop can be rewritten to check for the exit condition and fulfill it at the end of the loop body.
 
<langsyntaxhighlight Lisplang="lisp">(let ((val 0) done)
(while (not done)
(setq val (1+ val))
(message "%d" val)
(setq done (zerop (mod val 6)))))</langsyntaxhighlight>
 
=={{header|Erlang}}==
 
<syntaxhighlight lang="erlang">
<lang Erlang>
do() ->
do(0).
Line 948 ⟶ 1,246:
io:fwrite( "~p ", [N] ),
do(N+1).
</syntaxhighlight>
</lang>
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
<lang ERRE>
A=0
REPEAT
Line 957 ⟶ 1,255:
PRINT(A)
UNTIL A MOD 6=0 !UNTIL A-6*INT(A/6)=0 for C-64
</syntaxhighlight>
</lang>
 
=={{header|Euphoria}}==
{{works with|Open Euphoria}}
<langsyntaxhighlight lang="euphoria">
include std/console.e
include std/math.e
Line 974 ⟶ 1,272:
 
if getc(0) then end if
</syntaxhighlight>
</lang>
 
=={{header|F_Sharp|F#}}==
If you must have a loop then this is acceptable F#
<langsyntaxhighlight lang="fsharp">
let rec loop n =
printfn "%d " n
if (n+1)%6 > 0 then loop (n+1)
loop 0
</syntaxhighlight>
</lang>
 
But I prefer this way:
<langsyntaxhighlight lang="fsharp">
Seq.initInfinite id |> Seq.takeWhile(fun n->n=0 || n%6>0) |> Seq.iter (fun n-> printfn "%d" n)
</syntaxhighlight>
</lang>
 
Either produces:
Line 1,003 ⟶ 1,301:
Many of the solutions to this task show no output in spite of it being required in the task dexcription, so who knows what they do? Of some that have output they think it should be 1 to 6, who can tell from the task description? The following produces 1..6.
 
<langsyntaxhighlight lang="fsharp">
// Loops/Do-while. Nigel Galloway: February 14th., 2022
Seq.unfold(fun n->match n with Some n->let n=n+1 in Some(n,if n%6=0 then None else Some(n)) |_->None)(Some 0)|>Seq.iter(printfn "%d")
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,019 ⟶ 1,317:
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">0 [ dup 6 mod 0 = not ] [ [ . ] [ 1 + ] bi ] do while drop</langsyntaxhighlight>
 
=={{header|Fantom}}==
Line 1,025 ⟶ 1,323:
There is no do-while statement in Fantom, so instead use an infinite while loop with a break statement:
 
<langsyntaxhighlight lang="fantom">
class Main
{
Line 1,039 ⟶ 1,337:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: do-until
0
begin 1+
Line 1,048 ⟶ 1,346:
dup 6 mod 0=
until
drop ;</langsyntaxhighlight>
 
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
<langsyntaxhighlight lang="fortran">INTEGER :: i = 0
DO
i = i + 1
WRITE(*, *) i
IF (MOD(i, 6) == 0) EXIT
END DO</langsyntaxhighlight>
 
{{works with|Fortran|77 and later}}
<langsyntaxhighlight lang="fortran"> PROGRAM DOWHILE
C Initialize modulus and value.
INTEGER MODLUS, IVALUE
Line 1,074 ⟶ 1,372:
 
STOP
END</langsyntaxhighlight>
 
{{works with|Fortran|IV and later}}
<langsyntaxhighlight lang="fortran"> IVALUE = 0
10 CONTINUE
IVALUE=IVALUE+1
Line 1,083 ⟶ 1,381:
301 FORMAT(I5)
IF(MOD(IVALUE,6).NE.0) GOTO 10
END</langsyntaxhighlight>
 
{{works with|Fortran|I and later}}
<langsyntaxhighlight lang="fortran"> IVALUE = 0
10 IVALUE=IVALUE+1
WRITE 301,IVALUE
Line 1,092 ⟶ 1,390:
IF(IVALUE-IVALUE/6*6) 10,20,10
20 STOP
END</langsyntaxhighlight>
 
=={{header|Fortress}}==
Line 1,098 ⟶ 1,396:
Due to the way that Fortress works, you have to use a label to escape a loop upon a specified condition being met. There is no traditional <code>break</code> equivalent.
 
<langsyntaxhighlight lang="fortress">
component loops_do_while
export Executable
Line 1,114 ⟶ 1,412:
end loop
end
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,124 ⟶ 1,422:
5
6
</pre>
 
=={{header|FreeBASIC}}==
<lang freebasic>' FB 1.05. 0 Win64
 
Dim i As Integer = 0
Do
i += 1
Print i; " ";
Loop While i Mod 6 <> 0
Print
Sleep</lang>
 
{{out}}
<pre>
1 2 3 4 5 6
</pre>
 
=={{header|Frink}}==
<langsyntaxhighlight lang="frink">n = 0
do
{
n = n + 1
println[n]
} while n mod 6 != 0</langsyntaxhighlight>
 
=={{header|FutureBasic}}==
<lang futurebasic>window 1
 
dim as long i
 
do
i++
print i
until ( i mod 6 == 0 )
 
HandleEvents</lang>
Output:
<pre>
1
2
3
4
5
6
</pre>
 
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=57e91eab60baf7e39df9b6d16a0deddd Click this link to run this code]'''
<lang gambas>Public Sub Main()
Dim siCount As Short
 
Repeat
Inc siCount
Print siCount;;
Until siCount Mod 6 = 0
 
End</lang>
Output:
<pre>
1 2 3 4 5 6
</pre>
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap">n := 0;
repeat
n := n + 1;
Print(n, "\n");
until RemInt(n, 6) = 0;</langsyntaxhighlight>
 
=={{header|GML}}==
<langsyntaxhighlight GMLlang="gml">i = 0
do
{
Line 1,201 ⟶ 1,446:
show_message(string(i))
}
until (i mod 6 = 0)</langsyntaxhighlight>
 
=={{header|Go}}==
There is no explicit do-while in Go, but it can be simulated with a range-based for loop and the break statement.
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 1,218 ⟶ 1,463:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>1
Line 1,227 ⟶ 1,472:
6</pre>
It can also be simulated ''without'' using a break statement as follows:
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 1,237 ⟶ 1,482:
fmt.Println(value)
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,243 ⟶ 1,488:
Same as before.
</pre>
::<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 1,269 ⟶ 1,514:
}
fmt.Println(n3) // prt 8
}</langsyntaxhighlight>
 
=={{header|Groovy}}==
For Groovy 3.0.0 and later.
<langsyntaxhighlight lang="groovy">def i = 0
do {
i++
println i
} while (i % 6 != 0)</langsyntaxhighlight>
Previous versions of Groovy did not have a bottom-checking loop construct. Workaround is to use an "infinite" while loop with a conditional break as the last statement.
<langsyntaxhighlight lang="groovy">def i = 0
while (true) {
i++
println i
if (i % 6 == 0) break
}</langsyntaxhighlight>
 
{{out}}
Line 1,293 ⟶ 1,538:
5
6</pre>
 
=={{header|GW-BASIC}}==
GW-BASIC does not have a <code>do .. while</code> construct.
Equivalent using <code>WHILE</code>:
{{works with|PC-BASIC|any}}
<lang gwbasic>
10 LET I% = 0
20 ' first iteration - before the WHILE
30 LET I% = I% + 1
40 PRINT I%
50 WHILE I% MOD 6 <> 0
60 LET I% = I% + 1
70 PRINT I%
80 WEND
</lang>
Equivalent using <code>GOTO</code>:
{{works with|PC-BASIC|any}}
<lang gwbasic>
10 LET I% = 0
20 LET I% = I% + 1
30 PRINT I%
40 IF I% MOD 6 <> 0 THEN GOTO 20
</lang>
 
=={{header|Harbour}}==
<langsyntaxhighlight lang="visualfoxpro">LOCAL n := 0
 
DO WHILE .T.
Line 1,325 ⟶ 1,547:
EXIT
ENDIF
ENDDO</langsyntaxhighlight>
 
=={{header|Haskell}}==
<syntaxhighlight lang="haskell">import Data.List
 
<lang haskell>import Data.List
import Control.Monad
import Control.Arrow
 
doWhile p f n = (n:) $ takeWhile p $ unfoldr (Just.(id &&& f)) $ succ n</langsyntaxhighlight>
Example executed in GHCi:
<langsyntaxhighlight lang="haskell">*Main> mapM_ print $ doWhile ((/=0).(`mod`6)) succ 0
0
1
Line 1,341 ⟶ 1,562:
3
4
5</langsyntaxhighlight>
 
The standard Prelude also includes, without further import or definition, an '''until''' function, which takes three arguments – a predicate function, a transformation function, and an initial value.
 
<langsyntaxhighlight lang="haskell">main :: IO ()
main =
mapM_ print . reverse $
Line 1,351 ⟶ 1,572:
(\(x:_) -> (x > 0) && (mod x 6 == 0))
(\xs@(x:_) -> succ x : xs)
[0]</langsyntaxhighlight>
 
{{Out}}
Line 1,364 ⟶ 1,585:
=== With mutable references ===
Using iterateWhile from monad-loops package
<langsyntaxhighlight lang="haskell">import Data.IORef
import Control.Monad.Loops
 
Line 1,373 ⟶ 1,594:
val <- readIORef x
print val
return val</langsyntaxhighlight>
 
=={{header|Haxe}}==
<langsyntaxhighlight lang="haxe">var val = 0;
 
do {
val++;
Sys.println(val);
} while( val % 6 != 0);</langsyntaxhighlight>
 
=={{header|HolyC}}==
<langsyntaxhighlight lang="holyc">U8 i = 0;
do {
i++;
Print("%d\n", i);
} while (i % 6 != 0);</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
Icon and Unicon do not have a do-while looping control with end of loop checking. 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.)
<langsyntaxhighlight Iconlang="icon">procedure main()
 
i := 0
Line 1,399 ⟶ 1,620:
if i % 6 = 0 then break
}
end</langsyntaxhighlight>
 
=={{header|J}}==
J is array-oriented, so there is very little need for loops. For example, one could satisfy this task this way:
 
<syntaxhighlight lang=J> ,. ([^:(0=6|])>:)^:a: 0
0
1
2
3
4
5
</syntaxhighlight>
 
This could also be accomplished using [[j:Vocabulary/zcapco|Z:]] to provide early termination from a [[j:Vocabulary/fcap|fold]]:
 
<syntaxhighlight lang=J> 0#]F.(>: [ echo [ _2 Z: * * 0=6|]) 0
0
1
2
3
4
5
 
</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).
<langsyntaxhighlight lang="j">3 : 0 ] 0
 
NB. The 'st' in 'whilst' stands for 'skip test'
Line 1,417 ⟶ 1,657:
 
i.0 0
)</langsyntaxhighlight>
 
Though it's rare to see J code like this.
Line 1,423 ⟶ 1,663:
=={{header|Java}}==
 
<langsyntaxhighlight lang="java">int val = 0;
do{
val++;
System.out.println(val);
}while(val % 6 != 0);</langsyntaxhighlight>
 
=={{header|JavaScript}}==
 
===Javascript: Imperative===
<langsyntaxhighlight lang="javascript">var val = 0;
do {
print(++val);
} while (val % 6);</langsyntaxhighlight>
 
===Javascript: Functional===
Line 1,445 ⟶ 1,685:
:#and a conditional While function.
 
<langsyntaxhighlight JavaScriptlang="javascript">function doWhile(varValue, fnBody, fnTest) {
'use strict';
var d = fnBody(varValue); // a transformed value
Line 1,463 ⟶ 1,703:
}
).join('\n')
);</langsyntaxhighlight>
 
Output:
<syntaxhighlight lang="javascript">1
<lang JavaScript>1
2
3
4
5
6</langsyntaxhighlight>
 
Alternatively, if we assume instead that the unstated problem was not to produce repetitive computation, but to derive the '''membership of a set''' we could interpret the task as a request for a JavaScript implementation of the '''takeWhile''' function – a familiar staple of functional list processing.
Line 1,477 ⟶ 1,717:
So, for example, something like:
 
<langsyntaxhighlight JavaScriptlang="javascript">function range(m, n) {
'use strict';
return Array.apply(null, Array(n - m + 1)).map(
Line 1,504 ⟶ 1,744:
}
).join('\n')
);</langsyntaxhighlight>
 
Output:
<syntaxhighlight lang="javascript">1
<lang JavaScript>1
2
3
4
5</langsyntaxhighlight>
 
====ES6====
 
A process or value of this kind might be better expressed (in functionally composed JavaScript) with an '''unfold''' or '''until''' function, returning a list.
 
<langsyntaxhighlight JavaScriptlang="javascript">(() => {
'use strict';
 
Line 1,563 ⟶ 1,802:
return [result1, result2];
})();
</syntaxhighlight>
</lang>
 
<syntaxhighlight lang="javascript">[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]</syntaxhighlight>
 
<lang JavaScript>[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]</lang>
 
ES6 is a superset of Javascript so the Javascript and ES5 solution is valid. An example of a do-while loop in a generator follows that produces correct output:
 
<syntaxhighlight lang="javascript">
<lang JavaScript>
// generator with the do while loop
function* getValue(stop) {
Line 1,591 ⟶ 1,829:
printVal(gen, gen.next());
})();
</syntaxhighlight>
</lang>
 
<syntaxhighlight lang="javascript">
<lang JavaScript>
1
2
Line 1,600 ⟶ 1,838:
5
6
</syntaxhighlight>
</lang>
 
=={{header|jq}}==
Line 1,606 ⟶ 1,844:
In jq 1.4, the "recurse" built-in always emits the input value, and so to accomplish the task specified here,
we shall define a control structure: "do_while(action; condition)" as follows:
<langsyntaxhighlight lang="jq"># Perform the action, then check the condition, etc
def do_while( action; condition ):
def w: action | if (condition | not) then empty else ., w end;
w;</langsyntaxhighlight>
'''The task:'''
<langsyntaxhighlight lang="jq">0 | do_while( .+1; . % 6 != 0 )</langsyntaxhighlight>
{{out}}
1
Line 1,622 ⟶ 1,860:
Julia has no do-while construct. Here is one of several ways to implement do-while behavior.
 
<syntaxhighlight lang="julia">
<lang Julia>
julia> i = 0
0
Line 1,637 ⟶ 1,875:
4
5
</syntaxhighlight>
</lang>
 
Using a macro that mimics the classic C style do-while.
Line 1,643 ⟶ 1,881:
Notice that the symbol <code>while</code> cannot be used as it is a keyword, which is why <code>when</code> is used instead, also the macro definition is wrapped in a <code>@eval</code> macro invocation since <code>do</code> is also a keyword, but in Julia macro calls are prefixed by <code>@</code> so this is only an issue during the macro definition, not when invoked, ie. <code>@do block when condition</code>).
 
<syntaxhighlight lang="julia">
<lang Julia>
julia> @eval macro $(:do)(block, when::Symbol, condition)
when ≠ :when && error("@do expected `when` got `$s`")
Line 1,670 ⟶ 1,908:
i = 4
i = 5
</syntaxhighlight>
</lang>
 
Here is mostly the same macro, but with the conditional clause used first, which is arguably more readable.
 
<syntaxhighlight lang="julia">
<lang Julia>
julia> macro do_while(condition, block)
quote
Line 1,700 ⟶ 1,938:
i = 4
i = 5
</syntaxhighlight>
</lang>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.0.6
 
fun main(args: Array<String>) {
Line 1,711 ⟶ 1,949:
}
while (value % 6 != 0)
}</langsyntaxhighlight>
 
{{out}}
Line 1,727 ⟶ 1,965:
 
=={{header|Lasso}}==
<langsyntaxhighlight Lassolang="lasso">local(x = 0)
while(#x % 6 > 0 || #x == 0) => {^
++#x
'\r' // for formatting
^}</langsyntaxhighlight>
 
=={{header|Lambdatalk}}==
<langsyntaxhighlight lang="scheme">
{def do_while
{def do_while.r
Line 1,747 ⟶ 1,985:
{do_while 0}
-> 0 1 2 3 4 5 6 (end of loop)
</syntaxhighlight>
</lang>
 
=={{header|Liberty BASICLang}}==
Lang does not have a do-while loop. A simple loop like the example below can be used.
<lang lb>
<syntaxhighlight lang="lang">
a = 0
$i = 0
do
loop {
a =a +1
$i += 1
print a
loop until ( a mod 6) = 0
fn.println($i)
</lang>
 
if(!($i % 6)) {
See also [[#BASIC|BASIC]]
con.break
}
}
</syntaxhighlight>
 
=={{header|Lingo}}==
Lingo has no do..while, but here how this behavior can be implemented:
<langsyntaxhighlight lang="lingo">i = 0
repeat while TRUE
i = i+1
put i
if i mod 6 = 0 then exit repeat
end</langsyntaxhighlight>
 
=={{header|Lisaac}}==
<langsyntaxhighlight Lisaaclang="lisaac">+ val : INTEGER;
{
val := val + 1;
Line 1,776 ⟶ 2,018:
'\n'.print;
val % 6 != 0
}.while_do { };</langsyntaxhighlight>
 
=={{header|LiveCode}}==
<langsyntaxhighlight LiveCodelang="livecode">repeat while n mod 6 is not 0 or n is 0
add 1 to n
put n
end repeat</langsyntaxhighlight>
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">make "val 0
do.while [make "val :val + 1 print :val] [notequal? 0 modulo :val 6]
do.until [make "val :val + 1 print :val] [equal? 0 modulo :val 6]
Line 1,794 ⟶ 2,036:
if notequal? 0 modulo :n 6 [my.loop :n]
end
my.loop 0</langsyntaxhighlight>
 
=={{header|Lua}}==
Line 1,800 ⟶ 2,042:
Lua doesn't have a <code>do .. while</code> construct.
 
<langsyntaxhighlight lang="lua">
i=0
repeat
Line 1,806 ⟶ 2,048:
print(i)
until i%6 == 0
</syntaxhighlight>
</lang>
 
=={{header|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module checkit {
x=0
\\ Do or Repeat
Do
x++
print x,
when x mod 6>0
print
// or we can use Until x mod 6 = 0
// and we can use block if we like it
x=0
Do {
x++
Printprint x,
} Untilwhen x mod 6=>0
print
x=0
{
Line 1,824 ⟶ 2,074:
if x mod 6<>0 Then loop ' set loop flag of current block to true
\\ when block end check Loop flag and if true execute block again
Printprint Xx,
}
print
}
Checkit
module Old_Style {
</lang>
10 REM Loops/Do-while
20 LET I=0
30 LET I=I+1
40 PRINT I
50 IF INT(I/6)*6 <> I THEN 30
60 END
}
Old_Style
// modern style, using high order functions
module generic_iterator {
do_while = lambda (f, p)->{
{
if p(f()) then loop
}
}
funcA=lambda (start_from, do_what) -> {
=lambda i=start_from, do_what ->{
call do_what(i)
=i
i++
}
}
funcPrint=lambda ->{
print number
}
call do_while(funcA(1, funcPrint), lambda->number mod 6 <>0)
}
generic_iterator
</syntaxhighlight>
 
{{out}}
<pre>
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1
2
Line 1,847 ⟶ 2,130:
 
=={{header|Maple}}==
<langsyntaxhighlight Maplelang="maple">val := 0:
do
val := 1 + val;
Line 1,854 ⟶ 2,137:
break
end if;
end do:</langsyntaxhighlight>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
Because everything is an expression in Mathematica, <code>While[body;condition]</code> tests <code>condition</code> after <code>body</code> has been executed at least once.
<langsyntaxhighlight Mathematicalang="mathematica">value = 0;
While[
value++;
Print[value];
Mod[value,6]!=0
]</langsyntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}}==
 
<langsyntaxhighlight Matlablang="matlab"> a=0;
while (1)
a = a+1;
disp(a);
if (~mod(a,6)) break; end;
end; </langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">block([n: 0], do (ldisp(n: n + 1), if mod(n, 6) = 0 then return('done)))$</langsyntaxhighlight>
 
=={{header|MAXScript}}==
<langsyntaxhighlight lang="maxscript">a = 0
do
(
Line 1,884 ⟶ 2,167:
a += 1
)
while mod a 6 != 0</langsyntaxhighlight>
 
=={{header|Metafont}}==
Line 1,890 ⟶ 2,173:
Metafont has no a do-while construct; the same thing can be done using a forever loop and exitif.
 
<langsyntaxhighlight lang="metafont">a := 0;
forever: show a; a := a + 1; exitif a mod 6 = 0; endfor
end</langsyntaxhighlight>
 
=={{header|Microsoft Small Basic}}==
Microsoft Small Basic does not have a <code>do .. while</code> construct.
Equivalent using <code>While</code>:
<lang microsoftsmallbasic>
i = 0
' first iteration - before the While
i = i + 1
TextWindow.WriteLine(i)
While Math.Remainder(i, 6) <> 0
i = i + 1
TextWindow.WriteLine(i)
EndWhile
</lang>
Equivalent using <code>Goto</code>:
<lang microsoftsmallbasic>
i = 0
loopStart:
i = i + 1
TextWindow.WriteLine(i)
If Math.Remainder(i, 6) <> 0 Then
Goto loopStart
EndIf
</lang>
 
=={{header|min}}==
{{works with|min|0.19.6}}
<langsyntaxhighlight lang="min">0 (dup 6 mod 0 == over 0 != and) 'pop (puts succ) () linrec</langsyntaxhighlight>
 
=={{header|MIPS Assembly}}==
<syntaxhighlight lang="mips">
 
<lang mips>
.text
main: li $s0, 0 # start at 0.
Line 1,938 ⟶ 2,196:
li $v0, 10
syscall # syscall to end the program
</syntaxhighlight>
</lang>
 
=={{header|МК-61/52}}==
<syntaxhighlight lang="text">0 П4 КИП4 ИП4 6 / {x} x=0 02 С/П</langsyntaxhighlight>
 
=={{header|Modula-2}}==
<langsyntaxhighlight lang="modula2">MODULE DoWhile;
IMPORT InOut;
 
Line 1,957 ⟶ 2,215:
InOut.WriteLn;
UNTIL i MOD 6 = 0;
END DoWhile.</langsyntaxhighlight>
 
=={{header|Modula-3}}==
This is very similar to the [[Modula-2]] code above.
<langsyntaxhighlight lang="modula3">REPEAT
i := i + 1;
IO.Put(Fmt.Int(i));
UNTIL i MOD 6 = 0;</langsyntaxhighlight>
 
=={{header|Monicelli}}==
The do-while loop is the only kind of loop available in Monicelli
<langsyntaxhighlight lang="monicelli">
stuzzica
... # loop body
e brematura anche, se <expr> # exit if <expr> is false
</syntaxhighlight>
</lang>
 
=={{header|MUMPS}}==
{{works with|Caché ObjectScript}}
<langsyntaxhighlight MUMPSlang="mumps">DOWHILELOOP
set val = 0
do {
Line 1,983 ⟶ 2,241:
} while ((val # 6) '= 0)
quit</langsyntaxhighlight>
{{out}}<pre>
Line 1,996 ⟶ 2,254:
 
=={{header|Neko}}==
<syntaxhighlight lang="actionscript">/**
<lang ActionScript>/**
Loops/Do-while in Neko
Tectonics:
Line 2,007 ⟶ 2,265:
index += 1;
$print(index, "\n");
} while (index % 6) != 0</langsyntaxhighlight>
 
{{out}}
Line 2,020 ⟶ 2,278:
 
=={{header|Nemerle}}==
<langsyntaxhighlight Nemerlelang="nemerle">mutable x = 0;
do
{
x++;
WriteLine($"$x");
} while (x % 6 != 0)</langsyntaxhighlight>
 
=={{header|NetRexx}}==
In NetRexx the '''do&ndash;while''' construct is implemented via the <code>until ''expru''</code> conditional clause of the <code>loop</code> instruction. The expression ''expru'' in the <code>until ''expru''</code> clause is evaluated at the end of the loop, guaranteeing that the loop will be executed at least once.
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref savelog symbols nobinary
 
Line 2,040 ⟶ 2,298:
say i_
end
</syntaxhighlight>
</lang>
 
=={{header|NewLISP}}==
<langsyntaxhighlight NewLISPlang="newlisp">(let ((i 0))
(do-until (= 0 (% i 6))
(println (++ i))))</langsyntaxhighlight>
 
=={{header|Nim}}==
Nim does not have a do-while loop. The standard way to simulate it consists in an infinite loop with a break statement:
 
<langsyntaxhighlight Nimlang="nim">var val = 0
while true:
inc val
echo val
if val mod 6 == 0: break</langsyntaxhighlight>
 
It's also easy to write your own doWhile construction (but be aware that the instructions will be duplicated):
<langsyntaxhighlight Nimlang="nim">template doWhile(a, b: untyped): untyped =
b
while a:
Line 2,065 ⟶ 2,323:
doWhile val mod 6 != 0:
inc val
echo val</langsyntaxhighlight>
 
=={{header|NS-HUBASICNu}}==
<syntaxhighlight lang="nu">
<lang NS-HUBASIC>10 PRINT "NO,"A" ISN'T A MULTIPLE OF 6."
mut n = 0
20 A=A+1
while true {
30 IF A-(A/6)*6<>0 THEN GOTO 10
$n += 1
40 PRINT "YES, 6 IS A MULTIPLE OF 6."</lang>
print $n
if $n mod 6 == 0 {break}
}
</syntaxhighlight>
 
=={{header|Oberon-2}}==
Works with oo2c Version 2
<langsyntaxhighlight lang="oberon2">
MODULE LoopDoWhile;
IMPORT
Line 2,094 ⟶ 2,356:
Do
END LoopDoWhile.
</syntaxhighlight>
</lang>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
i := 0;
do {
Line 2,104 ⟶ 2,366:
}
while (i % 6 <> 0);
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
OCaml doesn't have a do-while loop, so we can just make a local loop:
<langsyntaxhighlight lang="ocaml">let rec loop i =
let i = succ i in
Printf.printf "%d\n" i;
Line 2,114 ⟶ 2,376:
loop i
in
loop 0</langsyntaxhighlight>
 
or implementing a generic do-while iterator with higher order function:
 
<langsyntaxhighlight lang="ocaml">let do_while f p =
let rec loop() =
f();
Line 2,124 ⟶ 2,386:
in
loop()
(** val do_while : (unit -> 'a) -> (unit -> bool) -> unit *)</langsyntaxhighlight>
 
<langsyntaxhighlight lang="ocaml">let v = ref 0 in
do_while (fun () -> incr v; Printf.printf "%d\n" !v)
(fun () -> !v mod 6 <> 0)</langsyntaxhighlight>
 
The example above is the an imperative form, below is its functional counterpart:
<langsyntaxhighlight lang="ocaml">let do_while f p ~init =
let rec loop v =
let v = f v in
Line 2,143 ⟶ 2,405:
(v))
(fun v -> v mod 6 <> 0)
~init:0</langsyntaxhighlight>
 
Or in a very poor OCaml style, we can use an exception to exit a while loop:
<langsyntaxhighlight lang="ocaml">let v = ref 0
exception Exit_loop
try while true do
Line 2,154 ⟶ 2,416:
raise Exit_loop;
done
with Exit_loop -> ()</langsyntaxhighlight>
 
=={{header|Octave}}==
The do-while can be changed into a do-until, just negating the condition of the while.
<langsyntaxhighlight lang="octave">val = 0;
do
val++;
disp(val)
until( mod(val, 6) == 0 )</langsyntaxhighlight>
 
=={{header|Oforth}}==
 
<langsyntaxhighlight Oforthlang="oforth">0 doWhile: [ 1+ dup . dup 6 rem 0 <> ] drop</langsyntaxhighlight>
 
=={{header|OpenEdge/Progress}}==
<langsyntaxhighlight lang="progress">DEFINE VARIABLE ii AS INTEGER.
 
DO WHILE ii MODULO 6 <> 0 OR ii = 0:
ii = ii + 1.
MESSAGE ii VIEW-AS ALERT-BOX.
END.</langsyntaxhighlight>
 
=={{header|Oz}}==
Normal Oz variables are single-assignment only. So we use a "cell", which is a one-element mutable container.
<langsyntaxhighlight lang="oz">declare
I = {NewCell 0}
in
Line 2,184 ⟶ 2,446:
I := @I + 1
{Show @I}
end</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
The generic Pari loops (<code>while</code>, <code>until</code>) test at the beginning, so just use an infinite loop with a break.
<langsyntaxhighlight lang="parigp">x = 0;
while(1,
print(x++);
if(x % 6 == 0, break)
)</langsyntaxhighlight>
 
If the loop body is something simple then it might be worked into the loop condition. This is obscure but compact.
 
<langsyntaxhighlight lang="parigp">x = 0;
while (print(x++) || x % 6, )</langsyntaxhighlight>
 
The condition in <code>while</code> and <code>until</code> is an expression, not a sequence, so <code>;</code> for multiple statements cannot be used there.
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">program countto6(output);
 
var
Line 2,213 ⟶ 2,475:
writeln(i)
until i mod 6 = 0
end.</langsyntaxhighlight>
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">my $val = 0;
do {
$val++;
print "$val\n";
} while ($val % 6);</langsyntaxhighlight>
<code>do ... until (''condition'')</code> is equivalent to <code>do ... while (not ''condition'')</code>.
<langsyntaxhighlight lang="perl">my $val = 0;
do {
$val++;
print "$val\n";
} until ($val % 6 == 0);</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">-->
<span style="color: #004080;">integer</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">while</span> <span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
Line 2,236 ⟶ 2,498:
<span style="color: #008080;">if</span> <span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<!--</langsyntaxhighlight>-->
 
=={{header|Phixmonti}}==
<syntaxhighlight lang="Phixmonti">/# Rosetta Code problem: https://rosettacode.org/wiki/Loops/Do-while
by Galileo, 11/2022 #/
 
include ..\Utilitys.pmt
 
0
true while
1 +
dup ?
dup 6 mod
endwhile</syntaxhighlight>
 
=={{header|PHL}}==
 
<langsyntaxhighlight lang="phl">var i = 0;
do {
i = i::inc;
printf("%i\n", i);
} while (i%6 != 0);</langsyntaxhighlight>
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php">$val = 0;
do {
$val++;
print "$val\n";
} while ($val % 6 != 0);</langsyntaxhighlight>
 
=={{header|Picat}}==
===do while loop===
<langsyntaxhighlight Picatlang="picat">go =>
N = 0,
do
N := N+1,
println(N)
while (N mod 6 != 0).</langsyntaxhighlight>
 
===Recursion===
<langsyntaxhighlight Picatlang="picat">go2 =>
do_while(0).
 
Line 2,270 ⟶ 2,545:
println(N1),
N1 mod 6 != 0,
do_while(N1).</langsyntaxhighlight>
 
Both outputs the same.
Line 2,284 ⟶ 2,559:
=={{header|PicoLisp}}==
Literally:
<langsyntaxhighlight PicoLisplang="picolisp">(let Val 0
(loop
(println (inc 'Val))
(T (=0 (% Val 6))) ) )</langsyntaxhighlight>
Shorter:
<langsyntaxhighlight PicoLisplang="picolisp">(let Val 0
(until (=0 (% (println (inc 'Val)) 6))) )</langsyntaxhighlight>
or:
<langsyntaxhighlight PicoLisplang="picolisp">(for (Val 0 (n0 (% (println (inc 'Val)) 6))))</langsyntaxhighlight>
 
=={{header|Pike}}==
<langsyntaxhighlight lang="pike">int main(){
int value = 0;
do {
Line 2,301 ⟶ 2,576:
write(value + "\n");
} while (value % 6);
}</langsyntaxhighlight>
 
=={{header|PL/0}}==
PL/0 does not have a <code>do .. while</code> construct. Equivalent using <code>while</code>:
<syntaxhighlight lang="pascal">
var i;
begin
i := 0;
i := i + 1;
! i;
while (i / 6) * 6 <> i do
begin
i := i + 1;
! i
end;
end.
</syntaxhighlight>
{{out}}
<pre>
1
2
3
4
5
6
</pre>
 
=={{header|PL/I}}==
<langsyntaxhighlight lang="pli">
dcl value fixed bin (31) init (0);
do forever;
Line 2,314 ⟶ 2,614:
put list (value);
end;
</syntaxhighlight>
</lang>
or shorter:
<langsyntaxhighlight lang="pli">
dcl value fixed bin(31) init(0);
do Until(value=6);
value+=1;
put Skip list(value);
end;</langsyntaxhighlight>
{{out}}
<pre>
Line 2,334 ⟶ 2,634:
=={{header|Plain English}}==
Plain English has one kind of loop: an infinite loop with (hopefully) a conditional break/exit. So if you want a do-while, put the conditional break/exit at the end of the loop.
<langsyntaxhighlight lang="plainenglish">To run:
Start up.
Demonstrate do-while.
Line 2,345 ⟶ 2,645:
Write the string on the console.
If the counter is evenly divisible by 6, exit.
Repeat.</langsyntaxhighlight>
 
=={{header|Pop11}}==
<langsyntaxhighlight lang="pop11">lvars val = 0;
while true do
val + 1 -> val;
printf(val, '%p\n');
quitif(val rem 6 = 0);
endwhile;</langsyntaxhighlight>
 
=={{header|PowerShell}}==
<langsyntaxhighlight lang="powershell">$n = 0
do {
$n++
$n
} while ($n % 6 -ne 0)</langsyntaxhighlight>
 
=={{header|Prolog}}==
<langsyntaxhighlight lang="prolog">
% initial condition
do(0):- write(0),nl,do(1).
Line 2,379 ⟶ 2,679:
do(0).
 
</syntaxhighlight>
</lang>
 
=={{header|PureBasic}}==
{{works with|PureBasic|4.41}}
<lang PureBasic>x=0
Repeat
x+1
Debug x
Until x%6=0</lang>
 
=={{header|Python}}==
Python doesn't have a do-while loop.
<langsyntaxhighlight lang="python">val = 0
while True:
val +=1
print val
if val % 6 == 0: break</langsyntaxhighlight>
or repeat the body of the loop before a standard while.
<langsyntaxhighlight lang="python">val = 1
print val
while val % 6 != 0:
val += 1
print val</langsyntaxhighlight>
 
=={{header|QB64}}==
''CBTJD'': 2020/03/14
<lang qbasic>DO
PRINT n
n = n + 1
LOOP WHILE n MOD 6 <> 0</lang>
 
<lang QB64>
'Another demo of DO loops
Dim As Integer Counter
Print "First loop DO..LOOP UNTIL"
Counter = 0
Do
Print Counter
Counter = Counter + 1
Loop Until Counter Mod 6 = 0
Print "Counter Mod 6 = "; Counter Mod 6
Print "First loop DO WHILE..LOOP"
Counter = 1
Do While Counter Mod 6 <> 0
Print Counter
Counter = Counter + 1
Loop
Print "Counter Mod 6 = "; Counter Mod 6
End
</lang>
 
=={{header|Quackery}}==
Quackery's control flow words are mix-and-match. To satisfy this task, we can check for the exit condition at the end of the loop. <code>until</code> means <tt>jump to <code>[</code> if ToS is false</tt>.
<langsyntaxhighlight lang="quackery">0 [ 1+ dup echo cr
dup 6 mod 0 = until ] drop</langsyntaxhighlight>
 
=={{header|R}}==
<langsyntaxhighlight Rlang="r">i <- 0
repeat
{
Line 2,442 ⟶ 2,707:
print(i)
if(i %% 6 == 0) break
}</langsyntaxhighlight>
 
=={{header|Racket}}==
 
Idiomatic Racket code is functional:
<langsyntaxhighlight lang="racket">
#lang racket
(let loop ([n 0])
Line 2,453 ⟶ 2,717:
(displayln n)
(unless (zero? (modulo n 6)) (loop n))))
</syntaxhighlight>
</lang>
 
But an imperative version is easy to do too:
<langsyntaxhighlight lang="racket">
#lang racket
(define n 0)
Line 2,463 ⟶ 2,727:
(displayln n)
(unless (zero? (modulo n 6)) (loop)))
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
Line 2,469 ⟶ 2,733:
{{works with|Rakudo Star|2010.08}}
 
<syntaxhighlight lang="raku" perl6line>my $val = 0;
repeat {
say ++$val;
} while $val % 6;</langsyntaxhighlight>
 
<code>repeat ... until ''condition''</code> is equivalent to <code>do ... while not ''condition''</code>.
 
<syntaxhighlight lang="raku" perl6line>my $val = 0;
repeat {
say ++$val;
} until $val %% 6;</langsyntaxhighlight>
(Here we've used <code>%%</code>, the "divisible-by" operator.)
<p>
You can also put the condition before the block, without changing the order of evaluation.
 
<syntaxhighlight lang="raku" perl6line>my $val = 0;
repeat while $val % 6 {
say ++$val;
}</langsyntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight REBOLlang="rebol">REBOL [
Title: "Loop/While"
URL: http://rosettacode.org/wiki/Loop/Do_While
Line 2,504 ⟶ 2,768:
 
0 = mod value 6
]</langsyntaxhighlight>
 
{{out}}
Line 2,515 ⟶ 2,779:
 
=={{header|Red}}==
<langsyntaxhighlight Redlang="red">Red []
i: 0
until [
Line 2,522 ⟶ 2,786:
i % 6 = 0 ;; loop , until this is true...
]
</langsyntaxhighlight>{{out}}
<pre>i: 0
i: 1
Line 2,540 ⟶ 2,804:
<br>This necessitates the use of '''DO UNTIL''' instead of '''DO WHILE'''.
===version 1===
<langsyntaxhighlight lang="rexx">/*REXX program demonstrates a DO UNTIL construction. */
v=0
do until v//6==0 /*REXX // is the ÷ remainder.*/
Line 2,546 ⟶ 2,810:
say v
end
/*stick a fork in it, we're done.*/</langsyntaxhighlight>
{{out}}
<pre>
Line 2,558 ⟶ 2,822:
 
===version 2===
<langsyntaxhighlight lang="rexx">/*REXX program demonstrates a DO UNTIL construction. */
 
do v=1 until v//6==0 /*REXX // is the ÷ remainder.*/
say v
end
/*stick a fork in it, we're done.*/</langsyntaxhighlight>
'''output''' is the same as the 1<sup>st</sup> version.<br>
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
n = 0
While True
Line 2,573 ⟶ 2,837:
if n % 6 = 0 exit ok
end
</syntaxhighlight>
</lang>
 
=={{header|RPL}}==
To ensure at least one loop, <code>DO</code>..<code>UNTIL</code>..<code>END</code> must be used rather than <code>WHILE</code>..<code>REPEAT</code>..<code>END</code>. To actually print (on paper) instead of pushing in the stack successive results, the <code>DUP</code> instruction inside the loop shall be replaced by <code>PR1</code>
≪ 0
'''DO'''
1 + DUP
'''UNTIL''' DUP 6 MOD 0 == '''END'''
DROP
 
=={{header|Ruby}}==
Line 2,582 ⟶ 2,855:
! until
|-
| <langsyntaxhighlight lang="ruby">val = 0
begin
val += 1
puts val
end while val % 6 != 0</langsyntaxhighlight>
| <langsyntaxhighlight lang="ruby">val = 0
begin
val += 1
puts val
end until val % 6 == 0</langsyntaxhighlight>
|}
 
During November 2005, Yukihiro Matsumoto, the creator of Ruby, [https://web.archive.org/web/20220322235407/http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6741 regretted this loop feature] and [https://web.archive.org/web/20220322235418/http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6745 suggested using Kernel#loop].
 
{| class="wikitable"
Line 2,600 ⟶ 2,873:
! break if
|-
| <langsyntaxhighlight lang="ruby">val = 0
loop do
val += 1
puts val
break unless val %6 != 0
end</langsyntaxhighlight>
| <langsyntaxhighlight lang="ruby">val = 0
loop do
val += 1
puts val
break if val %6 == 0
end</langsyntaxhighlight>
|}
 
Line 2,620 ⟶ 2,893:
Rust does not have a <tt>do...while</tt> loop. Instead, the keyword <tt>loop</tt> is used with a termination condition.
 
<langsyntaxhighlight lang="rust">let mut x = 0;
 
loop {
Line 2,627 ⟶ 2,900:
 
if x % 6 == 0 { break; }
}</langsyntaxhighlight>
 
=={{header|Salmon}}==
<langsyntaxhighlight Salmonlang="salmon">variable x := 0;
do
{
Line 2,636 ⟶ 2,909:
x!
}
while (x % 6 != 0);</langsyntaxhighlight>
 
=={{header|SAS}}==
<langsyntaxhighlight lang="sas">/* using DO UNTIL so that the loop executes at least once */
data _null_;
n=0;
Line 2,646 ⟶ 2,919:
put n;
end;
run;</langsyntaxhighlight>
 
=={{header|Sather}}==
{{trans|C}}
<langsyntaxhighlight lang="sather">class MAIN is
main is
val ::= 0;
Line 2,659 ⟶ 2,932:
end;
end;
end;</langsyntaxhighlight>
 
=={{header|Scala}}==
Line 2,665 ⟶ 2,938:
 
===Imperative===
<langsyntaxhighlight lang="scala"> {
var (x, l) = (0, List[Int]())
do {
Line 2,673 ⟶ 2,946:
l
}.foreach(println(_))
</syntaxhighlight>
</lang>
 
===Tail recursive===
<langsyntaxhighlight lang="scala"> def loop(iter: Int, cond: (Int) => Boolean, accu: List[Int]): List[Int] = {
val succ = iter + 1
val temp = accu :+ succ
if (cond(succ)) loop(succ, cond, temp) else temp
}
println(loop(0, (_ % 6 != 0), Nil))</langsyntaxhighlight>
 
===Stream===
<langsyntaxhighlight lang="scala"> def loop(i: Int, cond: (Int) => Boolean): Stream[Int] = {
val succ = i + 1;
succ #:: (if (cond(succ)) loop(succ, cond) else Stream.empty)
}
loop(0, (_ % 6 != 0)).foreach(println(_))</langsyntaxhighlight>
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="scheme">(let loop ((i 1))
(display i)
(if (positive? (modulo i 6))
(loop (+ i 1))))</langsyntaxhighlight>
 
=={{header|Scilab}}==
{{works with|Scilab|5.5.1}}
<syntaxhighlight lang="text">v=0
while %T
v=v+1
Line 2,704 ⟶ 2,977:
if modulo(v,6)==0 then break; end
end
printf("\n")</langsyntaxhighlight>
{{out}}
<pre> 1 2 3 4 5 6 </pre>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const proc: main is func
Line 2,719 ⟶ 2,992:
writeln(number)
until number rem 6 = 0
end func;</langsyntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">var value = 0;
do {
say ++value;
} while (value % 6);</langsyntaxhighlight>
 
=={{header|Slate}}==
<langsyntaxhighlight lang="slate">[| val |
val: 0.
[val: val + 1.
print: val.
val \\ 6 ~= 0] whileTrue
] do.</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
 
<langsyntaxhighlight lang="smalltalk">|val|
val := 0.
[
val := val + 1.
val displayNl.
] doWhile: [ (val rem: 6) ~= 0 ]</langsyntaxhighlight>
 
<langsyntaxhighlight lang="smalltalk">|val|
val := 0.
[
val := val + 1.
val displayNl.
] doUntil: [ (val rem: 6) == 0 ]</langsyntaxhighlight>
 
To simulate the do-while construct, we can use the
<tt>whileTrue:</tt> method of a block with a void while block.
<langsyntaxhighlight lang="smalltalk">|val|
val := 0.
[
Line 2,759 ⟶ 3,032:
val displayNl.
(val rem: 6) ~= 0
] whileTrue: [ ]</langsyntaxhighlight>
 
Or send the loop block a <tt>whileTrue</tt> message (without argument).
<langsyntaxhighlight lang="smalltalk">|val|
val := 0.
[
Line 2,768 ⟶ 3,041:
val displayNl.
(val rem: 6) ~= 0
] whileTrue</langsyntaxhighlight>
 
Corresponding false-checking messages are <tt>whileFalse:</tt> and <tt>whileFalse</tt> (without argument)
 
=={{header|Sparkling}}==
<langsyntaxhighlight lang="sparkling">var i = 0;
do {
print(++i);
} while (i % 6 != 0);</langsyntaxhighlight>
 
=={{header|Spin}}==
Line 2,783 ⟶ 3,056:
{{works with|HomeSpun}}
{{works with|OpenSpin}}
<langsyntaxhighlight lang="spin">con
_clkmode = xtal1 + pll16x
_clkfreq = 80_000_000
Line 2,802 ⟶ 3,075:
waitcnt(_clkfreq + cnt)
ser.stop
cogstop(0)</langsyntaxhighlight>
{{out}}
<pre>1 2 3 4 5 6 </pre>
 
=={{header|SPL}}==
<langsyntaxhighlight lang="spl">n = 0
>
n += 1
#.output(n)
< n%6</langsyntaxhighlight>
{{out}}
<pre>
Line 2,827 ⟶ 3,100:
Use a flag to force the first loop. It's changed in the loop so that it will have no effect after the first loop.
 
<langsyntaxhighlight lang="stata">local n 0
local q 1
while `q' | mod(`n',6) {
local q 0
di `++n'
}</langsyntaxhighlight>
 
Use an infinite while loop and do the test with an ''[https://www.stata.com/help.cgi?if if]''' at the end of the loop.
 
<langsyntaxhighlight lang="stata">local n 0
while 1 {
di `++n'
if mod(`n',6)==0 continue, break
}</langsyntaxhighlight>
 
=== Mata ===
Mata has a '''[https://www.stata.com/help.cgi?m2_do do/while]''' loop:
 
<syntaxhighlight lang="text">mata
n=0
do {
printf("%f\n",++n)
} while (mod(n,6))
end</langsyntaxhighlight>
 
=={{header|Suneido}}==
<langsyntaxhighlight Suneidolang="suneido">val = 0
do
{
Print(++val)
} while (val % 6 isnt 0)</langsyntaxhighlight>
 
{{out}}
Line 2,869 ⟶ 3,142:
=={{header|Swift}}==
{{works with|Swift|3.x+}}
<langsyntaxhighlight lang="swift">var val = 0
repeat {
val += 1
print(val)
} while val % 6 != 0</langsyntaxhighlight>
{{works with|Swift|2.x}}
<langsyntaxhighlight lang="swift">var val = 0
repeat {
val++
print(val)
} while val % 6 != 0</langsyntaxhighlight>
{{works with|Swift|1.x}}
<langsyntaxhighlight lang="swift">var val = 0
do {
val++
println(val)
} while val % 6 != 0</langsyntaxhighlight>
 
=={{header|Tailspin}}==
In Tailspin you can loop by sending a value back to the matchers (by "-> #"). Depending on how you set that up, you create different loops.
<langsyntaxhighlight lang="tailspin">
templates doWhile
0 -> #
Line 2,896 ⟶ 3,169:
$val -> \(<?($ mod 6 <~=0>)> $!\) -> #
end doWhile
</syntaxhighlight>
</lang>
 
=={{header|Tcl}}==
Tcl does not have a built-in <code>do...while</code> construct. This example demonstrates the ease of creating new looping contructs in plain Tcl. <code>do</code> procedure taken from [http://wiki.tcl.tk/3603 Tcler's wiki]
<langsyntaxhighlight lang="tcl">proc do {body keyword expression} {
if {$keyword eq "while"} {
set expression "!($expression)"
Line 2,917 ⟶ 3,190:
 
set i 0
do {puts [incr i]} while {$i % 6 != 0}</langsyntaxhighlight>
{{tcllib|control}}
<langsyntaxhighlight lang="tcl">package require control
set i 0; control::do {puts [incr i]} while {$i % 6 != 0}
set i 0; control::do {puts [incr i]} until {$i % 6 == 0}</langsyntaxhighlight>
 
Mind you, it is also normal to write this task using a normal <code>while</code> as:
<langsyntaxhighlight lang="tcl">set i 0
while true {
puts [incr i]
if {$i % 6 == 0} break
}</langsyntaxhighlight>
 
=={{header|TUSCRIPT}}==
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
var=0
Line 2,939 ⟶ 3,212:
IF (rest==0) EXIT
ENDLOOP
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,954 ⟶ 3,227:
{{works with|pdksh}}
{{works with|zsh}}
<langsyntaxhighlight lang="bash">val=0
while true; do
echo $((++val))
[ $((val%6)) -eq 0 ] && break
done</langsyntaxhighlight>
 
{{works with|Bourne Shell}}
<langsyntaxhighlight lang="bash">val=0
while true; do
val=`expr $val + 1`
echo $val
expr $val % 6 = 0 >/dev/null && break
done</langsyntaxhighlight>
 
{{works with|zsh}}
<langsyntaxhighlight lang="bash">for ((val=1;;val++)) {
print $val
(( val % 6 )) || break
}</langsyntaxhighlight>
 
=={{header|Vala}}==
<langsyntaxhighlight lang="vala"> int a = 0;
 
do {
Line 2,982 ⟶ 3,255:
}
while ( a % 6 != 0);
</syntaxhighlight>
</lang>
 
=={{header|VBA}}==
<lang VB>Public Sub LoopDoWhile()
Dim value As Integer
value = 0
Do
value = value + 1
Debug.Print value;
Loop While value Mod 6 <> 0
End Sub</lang>{{out}}<pre> 1 2 3 4 5 6 </pre>
 
=={{header|Vedit macro language}}==
<langsyntaxhighlight lang="vedit">#1 = 0
do {
#1++
Num_Type(#1)
} while (#1 % 6 != 0);</langsyntaxhighlight>
 
=={{header|Verbexx}}==
<langsyntaxhighlight lang="verbexx">// Basic @LOOP until: verb
 
@LOOP init:{@VAR n = 0} until:(n % 6 == 0)
Line 3,008 ⟶ 3,271:
n++;
@SAY n;
};</langsyntaxhighlight>
 
 
=={{header|Verilog}}==
<syntaxhighlight lang="verilog">
<lang Verilog>
module main;
integer i;
Line 3,027 ⟶ 3,289:
end
endmodule
</syntaxhighlight>
</lang>
 
=={{header|V (Vlang)}}==
 
=={{header|Visual Basic .NET}}==
<lang vbnet>Dim i = 0
Do
i += 1
Console.WriteLine(i)
Loop Until i Mod 6 = 0</lang>
 
=={{header|Wren}}==
Wren doesn't have a ''do/while'' loop as such but we can simulate it using an infinite loop with a final conditional break.
<lang ecmascript>var v = 0
while (true) {
v = v + 1
System.print(v)
if (v%6 == 0) break
}</lang>
 
{{out}}
<pre>
1
2
3
4
5
6
</pre>
It can also be simulated ''without'' using a break statement as follows:
<lang ecmascript>var value = 0
var ok = true
while (ok) {
value = value + 1
System.print(value)
ok = value%6 != 0
}</lang>
 
{{out}}
<pre>
Same as before.
</pre>
 
=={{header|Vlang}}==
{{trans|go}}
There is no explicit do-while in Vlang, but it can be simulated with a range-based for loop and the break statement.
<langsyntaxhighlight lang="go">fn main() {
mut value := 0
for {
Line 3,081 ⟶ 3,303:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>1
Line 3,090 ⟶ 3,312:
6</pre>
It can also be simulated ''without'' using a break statement as follows:
<langsyntaxhighlight lang="vlang">fn main() {
mut value := 0
for ok := true; ok; ok = value%6 != 0 {
Line 3,096 ⟶ 3,318:
println(value)
}
}</langsyntaxhighlight>
 
{{out}}
Line 3,102 ⟶ 3,324:
Same as before.
</pre>
::<langsyntaxhighlight lang="vlang">fn main() {
// do-while loop 1
mut n1 := 2
Line 3,124 ⟶ 3,346:
}
println(n3) // prt 8
}</langsyntaxhighlight>
 
=={{header|Wren}}==
Wren doesn't have a ''do/while'' loop as such but we can simulate it using an infinite loop with a final conditional break.
<syntaxhighlight lang="wren">var v = 0
while (true) {
v = v + 1
System.print(v)
if (v%6 == 0) break
}</syntaxhighlight>
{{out}}
<pre>
1
2
3
4
5
6
</pre>
It can also be simulated ''without'' using a break statement as follows:
<syntaxhighlight lang="wren">var value = 0
var ok = true
while (ok) {
value = value + 1
System.print(value)
ok = value%6 != 0
}</syntaxhighlight>
 
{{out}}
<pre>
Same as before.
</pre>
 
=={{header|X86 Assembly}}==
{{works with|nasm}}
{{works with|windows}}
<langsyntaxhighlight lang="asm">
extern _printf
 
Line 3,155 ⟶ 3,408:
xor eax, eax
ret
</syntaxhighlight>
</lang>
 
=={{header|XBasic}}==
{{works with|Windows XBasic}}
<lang xbasic>
PROGRAM "dowhile"
 
DECLARE FUNCTION Entry()
 
FUNCTION Entry()
val% = 0
DO
INC val%
PRINT val%
LOOP WHILE val% MOD 6 <> 0 ' or LOOP UNTIL val% MOD 6 = 0
END FUNCTION
END PROGRAM
</lang>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code CrLf=9, IntOut=11;
int V;
[V:= 0;
Line 3,181 ⟶ 3,417:
IntOut(0, V); CrLf(0);
until rem(V/6) = 0;
]</langsyntaxhighlight>
 
=={{header|Yorick}}==
<langsyntaxhighlight lang="yorick">val = 0;
do {
val++;
write, val;
} while(val % 6 != 0);</langsyntaxhighlight>
 
=={{header|zkl}}==
{{trans|Yorick}}
<langsyntaxhighlight lang="zkl">val := 0;
do {
val+=1;
val.print(" ");
} while(val % 6 != 0);</langsyntaxhighlight>
{{out}}
<pre>
Line 3,203 ⟶ 3,439:
 
=={{header|Zig}}==
<langsyntaxhighlight lang="zig">const std = @import("std");
 
pub fn main() !void {
Line 3,217 ⟶ 3,453:
try std.io.getStdOut().writer().print("{d}\n", .{a});
}
}</langsyntaxhighlight>
 
{{omit from|GUISS}}
{{omit from|Commodore BASIC}}
2,041

edits