Loops/Continue: Difference between revisions
(add Zig example) |
No edit summary |
||
Line 1,042: | Line 1,042: | ||
This sort of scheme facilitates a compact way of printing a table with a heading, where the WRITE statement simply pours forth the data and relies on something like FORMAT("heading",/,(complex details for one line)) - thus printing the table line-by-line with only the first line having the heading, a saving on having a write and format statement pair for the heading and a second pair for the table body. |
This sort of scheme facilitates a compact way of printing a table with a heading, where the WRITE statement simply pours forth the data and relies on something like FORMAT("heading",/,(complex details for one line)) - thus printing the table line-by-line with only the first line having the heading, a saving on having a write and format statement pair for the heading and a second pair for the table body. |
||
=={{header|FutureBasic}}== |
|||
<lang futurebasic>include "NSLog.incl" |
|||
long num |
|||
for num = 1 to 10 |
|||
if ( num mod 5 ) |
|||
NSLog(@"%ld, \b",num) |
|||
else |
|||
NSLog(@"%ld") |
|||
end if |
|||
next |
|||
HandleEvents</lang> |
|||
=={{header|Gambas}}== |
=={{header|Gambas}}== |
Revision as of 19:38, 12 June 2022
You are encouraged to solve this task according to the task description, using any language you may know.
- Task
Show the following output using one loop.
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Try to achieve the result by forcing the next iteration within the loop
upon a specific condition, if your language allows it.
- 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
11l
<lang 11l>L(i) 1..10
I i % 5 == 0 print(i) L.continue print(i, end' ‘, ’)</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
360 Assembly
<lang 360asm>* Loops/Continue 12/08/2015 LOOPCONT CSECT
USING LOOPCONT,R12 LR R12,R15
BEGIN LA R8,0
SR R5,R5 LA R6,1 LA R7,10
LOOPI BXH R5,R6,ELOOPI for i=1 to 10
LA R3,MVC(R8) XDECO R5,XDEC MVC 0(4,R3),XDEC+8 LA R8,4(R8) LR R10,R5 LA R1,5 SRDA R10,32 DR R10,R1 LTR R10,R10 BNZ COMMA XPRNT MVC,80 LA R8,0 B NEXTI
COMMA LA R3,MVC(R8)
MVC 0(2,R3),=C', ' LA R8,2(R8)
NEXTI B LOOPI next i ELOOPI XR R15,R15
BR R14
MVC DC CL80' ' XDEC DS CL16
YREGS END LOOPCONT</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Ada
Ada doesn't have a continue statement, so we have to use a goto statement. The previous submitter said continue is not needed. In this example it is indeed not needed, but that is not always the case. An example is a loop where a number of interdependent conditions are checked before executing the main body of the loop. Without a continue statement (or goto), one ends up with nested statements with the main body to the far right of the page.
B.N. You should always try to avoid using a goto, but if you really must, it's there in Ada.
P.S. it is often simplest to place the label on top of the loop, as in real life the need occurs when reading input, so there is no range condition in the loop and we can forgo the null statement.
<lang ada>with Ada.Text_IO; use Ada.Text_IO;
procedure Loop_Continue is begin
for I in 1..10 loop Put (Integer'Image(I)); if I = 5 or I = 10 then New_Line; goto Continue; end if; Put (","); <<Continue>> --Ada 2012 no longer requires a statement after the label end loop;
end Loop_Continue;</lang>
N. This is a more true-to-Ada strategy for 'continue' comprising of an outer iteration loop and an inner labeled single-pass loop. This is a safer strategy than using goto which could be problematic when dealing with complex nested loops.
<lang ada>with Ada.Text_IO; use Ada.Text_IO;
procedure Loop_Continue is begin
Print_All: for I in 1 .. 10 loop Print_Element: loop Put (Integer'Image(I)); if I = 5 or I = 10 then New_Line; exit Print_Element; end if; Put (","); exit Print_Element; end loop Print_Element; end loop Print_All;
end Loop_Continue;</lang>
Agena
Agena doesn't have a continue statement, conditional statements can be used instead. <lang agena>for i to 10 do
write( i ); if i % 5 = 0 then write( "\n" ) else write( ", " ) fi
od</lang>
Aikido
<lang aikido>foreach i 1..10 {
print (i) if ((i % 5) == 0) { println() continue } print (", ")
}</lang>
ALGOL 60
begin integer i; for i:=1 step 1 until 10 do begin outinteger(i); if i=(i div 5)*5 then outimage else outstring(", ") end end
- Output:
+1 , +2 , +3 , +4 , +5 +6 , +7 , +8 , +9 , +10
ALGOL 68
ALGOL 68 has no continue reserved word, nor does it need one. The continue reserved word is only syntactic sugar for operations that can be achieved without it as in the following example: <lang algol68>FOR i FROM 1 TO 10 DO
print ((i, IF i MOD 5 = 0 THEN new line ELSE "," FI ))
OD</lang>
- Output:
+1, +2, +3, +4, +5 +6, +7, +8, +9, +10
ALGOL W
Algol W doesn't have a continue statement - conditional statements can be used instead. <lang algolw>begin
i_w := 1; s_w := 0; % set output format % for i := 1 until 10 do begin writeon( i ); if i rem 5 = 0 then write() else writeon( ", " ) end for_i
end.</lang>
AppleScript
<lang AppleScript> set table to {return} repeat with i from 1 to 10 if i < 5 or (i ≥ 6 and i < 10) then set end of table to i & ", " else if i = 5 or i = 10 then set end of table to i & return end if end repeat return table as string </lang>
- Output:
" 1, 2, 3, 4, 5 6, 7, 8, 9, 10 "
Arturo
<lang rebol>loop 1..10 'i [
prints i if 0 = i%5 [ print "" continue ] prints ", "
]</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
AutoHotkey
<lang autohotkey>Loop, 10 {
Delimiter := (A_Index = 5) || (A_Index = 10) ? "`n":", " Index .= A_Index . Delimiter
} MsgBox %Index%</lang>
AWK
<lang awk>BEGIN {
for(i=1; i <= 10; i++) { printf("%d", i) if ( i % 5 == 0 ) { print continue } printf(", ") }
}</lang>
BASIC
Applesoft BASIC
<lang ApplesoftBasic> 10 FOR I = 1 TO 10
20 PRINT I; 30 IF I - INT (I / 5) * 5 = 0 THEN PRINT : GOTO 50"CONTINUE 40 PRINT ", "; 50 NEXT</lang>
BASIC256
<lang BASIC256>for i = 1 to 10 print string(i); if i mod 5 = 0 then print continue for end if print ", "; next print end</lang>
BBC BASIC
BBC BASIC doesn't have a 'continue' statement so the remainder of the loop must be made conditional. <lang bbcbasic> FOR i% = 1 TO 10
PRINT ; i% ; IF i% MOD 5 = 0 PRINT ELSE PRINT ", "; NEXT</lang>
Commodore BASIC
Commodore BASIC also doesn't have a 'continue' statement. In this example, a GOTO statement is used to simulate 'CONTINUE'. However, Commodore BASIC doesn't have a modulo (remainder) operator, so value of I/5 is check against INT(I/5). If they are the same, the remainder is zero. <lang qbasic>10 FOR I = 1 to 10 20 PRINT I; 30 IF INT(I/5) = I/5 THEN PRINT : GOTO 50 40 PRINT ", "; 50 NEXT</lang>
FreeBASIC
<lang freebasic>' FB 1.05.0 Win64 For i As Integer = 1 To 10
Print Str(i); If i Mod 5 = 0 Then Print Continue For End If Print ", ";
Next
Print Sleep</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
IS-BASIC
<lang IS-BASIC>100 FOR I=1 TO 10 110 PRINT STR$(I); 120 IF MOD(I,5)=0 THEN 130 PRINT 140 ELSE 150 PRINT ", "; 160 END IF 170 NEXT</lang>
Liberty BASIC
<lang lb> for i =1 to 10
if i mod 5 <>0 then print i; ", "; else print i
next i end </lang>
PureBasic
<lang purebasic>OpenConsole()
For i.i = 1 To 10
Print(Str(i)) If i % 5 = 0 PrintN("") Continue EndIf Print(",")
Next
Repeat: Until Inkey() <> ""</lang>
QB64
<lang qb64>Dim i As Integer For i = 1 To 10
Print LTrim$(Str$(i)); If i Mod 5 = 0 Then Print _Continue End If Print ", ";
Next</lang>
Run BASIC
<lang runbasic>for i = 1 to 10
if i mod 5 <> 0 then print i;", "; else print i
next i</lang>
Sinclair ZX81 BASIC
This probably isn't the most idiomatic way to produce the specified output—but it does illustrate ZX81 BASIC's equivalent of if <condition> continue
, which is IF <condition> THEN NEXT <loop-control variable>
.
<lang>10 FOR I=1 TO 10
20 PRINT I;
30 IF I/5=INT (I/5) THEN PRINT
40 IF I/5=INT (I/5) THEN NEXT I
50 PRINT ", ";
60 NEXT I</lang>
TI-89 BASIC
<lang ti-89>count() Prgm
""→s For i,1,10 s&string(i)→s If mod(i,5)=0 Then Disp s ""→s Cycle EndIf s&", "→s EndFor
EndPrgm</lang>
Ti-89 lacks support for multi-argument display command or controlling the print position so that one can print several data on the same line. The display command (Disp) only accepts one argument and prints it on a single line (causing a line a feed at the end, so that the next Disp command will print in the next line). The solution is appending data to a string (s), using the concatenator operator (&), by converting numbers to strings, and then printing the string at the end of the line.
True BASIC
<lang basic>FOR i = 1 TO 10
PRINT STR$(i); IF REMAINDER(i, 5) = 0 THEN PRINT ELSE !No existe el comando CONTINUE PRINT ", "; END IF
NEXT i PRINT END</lang>
VB-DOS, PDS
<lang QBASIC> OPTION EXPLICIT
DIM i AS INTEGER
CLS FOR i = 1 TO 10
PRINT STR$(i); IF (i MOD 5) THEN PRINT ","; ELSE PRINT
NEXT i END</lang>
Visual Basic .NET
<lang vbnet>For i = 1 To 10
Console.Write(i) If i Mod 5 = 0 Then Console.WriteLine() Else Console.Write(", ") End If
Next</lang>
bc
Requires a bc with the print and continue statements. POSIX bc has not these statements.
<lang bc>for (i = 1; i <= 10; i++) { print i if (i % 5) { print ", " continue } print "\n" } quit</lang>
Befunge
Befunge outputs numbers with a space after them, so the formatting is slightly off in this version. <lang Befunge> 1>:56+\`#v_@
+v %5:.:< 1>#v_55+,v ^ < >" ,",,v ^ <
</lang>
This version outputs a 'backspace' ASCII character to try to correct the format, but it may or may not work depending on if the character is accounted for by the output <lang Befunge> 1>:56+\`#v_@
+v5:,8.:< 1>%#v_55+,v ^ < >" ,",v ^ ,<
</lang>
Bracmat
Bracmat has no continue statement. <lang bracmat>( 0:?i & whl
' ( 1+!i:~>10:?i & put $ ( str $ ( !i (mod$(!i.5):0&\n|", ") ) ) )
);</lang>
C
<lang c>for(int i = 1;i <= 10; i++){
printf("%d", i); if(i % 5 == 0){ printf("\n"); continue; } printf(", ");
}</lang>
C#
<lang csharp>using System;
class Program {
static void Main(string[] args) { for (int i = 1; i <= 10; i++) { Console.Write(i);
if (i % 5 == 0) { Console.WriteLine(); continue; }
Console.Write(", "); } }
}</lang>
C++
<lang cpp>for(int i = 1;i <= 10; i++){
cout << i; if(i % 5 == 0){ cout << endl; continue; } cout << ", ";
}</lang>
Chapel
<lang chapel>for i in 1..10 {
write(i); if i % 5 == 0 then { writeln(); continue; } write(", ");
}</lang>
Clipper
LOOP keyword is used here instead of continue.
Works as is with Harbour 3.0.0 (Rev. 16951) <lang visualfoxpro>FOR i := 1 TO 10
?? i IF i % 5 == 0 ? LOOP ENDIF ?? ", "
NEXT</lang>
Clojure
Clojure doesn't have a continue keyword. It has a recur keyword, although I prefer to work with ranges in this case. <lang clojure>(doseq [n (range 1 11)]
(print n) (if (zero? (rem n 5)) (println) (print ", ")))</lang>
To address the task, however, here's an example loop/recur: <lang clojure>(loop [xs (range 1 11)]
(when-let [x (first xs)] (print x) (if (zero? (rem x 5)) (println) (print ", ")) (recur (rest xs))))</lang>
COBOL
<lang cobol> IDENTIFICATION DIVISION.
PROGRAM-ID. loop-continue.
DATA DIVISION. WORKING-STORAGE SECTION. 01 i PIC 99.
PROCEDURE DIVISION. PERFORM VARYING i FROM 1 BY 1 UNTIL 10 < i DISPLAY i WITH NO ADVANCING
IF FUNCTION MOD(i, 5) = 0 DISPLAY SPACE EXIT PERFORM CYCLE END-IF
DISPLAY ", " WITH NO ADVANCING END-PERFORM
GOBACK .</lang>
Note: COBOL does have a CONTINUE
verb, but this is a no-operation statement used in IF
and EVALUATE
statements.
ColdFusion
Remove the leading space from the line break tag. <lang cfm><cfscript>
for( i = 1; i <= 10; i++ ) { writeOutput( i ); if( 0 == i % 5 ) { writeOutput( "< br />" ); continue; } writeOutput( "," ); }
</cfscript></lang>
Common Lisp
Common Lisp doesn't have a continue keyword, but the do
iteration construct does use an implicit tagbody
, so it's easy to go
to any label.
Four solutions follow.
The first pushes the conditional (whether to print a comma and a space or a newline) into the format string.
The second uses the implicit tagbody
and go
.
The third is a do loop with conditionals outside of the output functions.
<lang lisp>(do ((i 1 (1+ i)))
((> i 10)) (format t "~a~:[, ~;~%~]" i (zerop (mod i 5))))
(do ((i 1 (1+ i)))
((> i 10)) (write i) (when (zerop (mod i 5)) (terpri) (go end)) (write-string ", ") end)
(do ((i 1 (1+ i)))
((> i 10)) (write i) (if (zerop (mod i 5)) (terpri) (write-string ", ")))</lang>
These use the loop
iteration form, which does not contain an implicit tagbody (though one could be explicitly included).
The first uses an explicit condition to omit the rest of the loop;
the second uses block
/return-from
to obtain the effect of skipping the rest of the code in the block
which makes up the entire loop body.
<lang lisp>(loop for i from 1 to 10
do (write i) if (zerop (mod i 5)) do (terpri) else do (write-string ", "))
(loop for i from 1 to 10 do
(block continue (write i) (when (zerop (mod i 5)) (terpri) (return-from continue)) (write-string ", ")))</lang>
D
<lang d>import std.stdio;
void main() {
foreach (i; 1 .. 11) { write(i); if (i % 5 == 0) { writeln(); continue; } write(", "); }
}</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Shorter version
<lang d> import std.stdio;
void main() {
foreach(i; 1..11) i % 5 ? writef("%s, ", i) : writeln(i);
} </lang>
dc
The four commands # n J M are special to OpenBSD dc. The # command starts a comment. The n command prints a number without a newline.
<lang dc>1 si # i = 1 [2Q]sA # A = code to break loop [[, ]P 1J]sB # B = code to print comma, continue loop [
li n # print i li 5 % 0 !=B # call B if i % 5 [
]P # print newline
M # mark from calling B li 1 + si # i += 1 li 10!<C # continue loop if 10 >= i
]sC li 10!<C # enter loop if 10 >= i</lang>
This program uses J and M to force the next iteration of a loop. The nJ command breaks n levels of brackets (like nQ does so), but then skips to the next M command. One can place M at the end of the iteration.
Delphi
<lang Delphi>program DoLoop(output); var
i: integer;
begin
for i := 1 to 10 do begin write(i); if i mod 5 = 0 then begin writeln; continue; end; write(', '); end;
end.</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
DWScript
<lang Delphi>var i : Integer;
for i := 1 to 10 do begin
Print(i); if i mod 5 = 0 then begin PrintLn(); continue; end; Print(', ');
end;</lang>
Dyalect
<lang Dyalect>for i in 1..10 {
print(i, terminator: "") if i % 5 == 0 { print() continue } print(", ", terminator: "")
}</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Ela
Direct Approach
<lang ela>open monad io
loop n =
if n > 10 then do return () else do putStr (show n) putStr f loop (n + 1) where f | n % 5 == 0 = "\r\n" | else = ", "
_ = loop 1 ::: IO</lang>
Using list
<lang ela>open monad io
loop [] = return () loop (x::xs) = do
putStr (show x) putStr f loop xs where f | x % 5 == 0 = "\r\n" | else = ", "
_ = loop [1..10] ::: IO</lang>
This version is more generic and can work for any given range of values.
Elixir
<lang elixir>defmodule Loops do
def continue do Enum.each(1..10, fn i -> IO.write i IO.write if rem(i,5)==0, do: "\n", else: ", " end) end
end
Loops.continue</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Erlang
<lang erlang>%% Implemented by Arjun Sunel -module(continue). -export([main/0, for_loop/1]).
main() -> for_loop(1).
for_loop(N) when N /= 5 , N <10 -> io:format("~p, ",[N] ), for_loop(N+1);
for_loop(N) when N >=10-> if N=:=10 -> io:format("~p\n",[N] ) end;
for_loop(N) -> if N=:=5 -> io:format("~p\n",[N] ), for_loop(N+1) end. </lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10 ok
ERRE
<lang ERRE> FOR I=1 TO 10 DO
PRINT(I;CHR$(29);) ! printing a numeric value leaves a blank after it ! chr$(29) delete it..... IF I MOD 5=0 THEN PRINT CONTINUE FOR END IF PRINT(",";)
END FOR PRINT </lang>
Euphoria
<lang euphoria>include std\console.e --only for any_key to make running command window easier on windows
for i = 1 to 10 do
if remainder(i,5) = 0 then printf(1, "%d\n", i) else printf(1,"%d, ", i) continue end if
end for any_key()</lang> Version without newline after 10 below. <lang euphoria>include std\console.e --only for any_key to make running command window easier on windows
for i = 1 to 10 do
if remainder(i,5) = 0 then switch i do case 10 then printf(1,"%d ",i) break --new to euphoria 4.0.0+ case else printf(1,"%d\n", i) end switch else printf(1,"%d, ", i) continue --new to euphoria 4.0.0+ end if
end for any_key() </lang>
F#
continue
is a reserved word, but it has no function.
In any case, it is not needed to complete this task.
<lang fsharp>for i in 1 .. 10 do
printf "%d" i if i % 5 = 0 then printf "\n" else printf ", "</lang>
Using Comma quibbling#The Function
<lang fsharp> let fN g=quibble (Seq.initInfinite(fun n ->if (n+1)%5=0 || (n+1)=List.length g then "\n" else ", ")) g fN [1] |> Seq.iter(fun(n,g)->printf "%d%s" n g) fN [1..9] |> Seq.iter(fun(n,g)->printf "%d%s" n g) fN [1..10] |> Seq.iter(fun(n,g)->printf "%d%s" n g) fN [1..11] |> Seq.iter(fun(n,g)->printf "%d%s" n g) </lang>
- Output:
1 1, 2, 3, 4, 5 6, 7, 8, 9 1, 2, 3, 4, 5 6, 7, 8, 9, 10 1, 2, 3, 4, 5 6, 7, 8, 9, 10 11
Factor
There is no built-in continue
in Factor.
<lang factor>1 10 [a,b] [
[ number>string write ] [ 5 mod 0 = "\n" ", " ? write ] bi
] each</lang>
Fantom
While and for loops support continue
to jump back to begin the next iteration of the loop.
<lang fantom> class LoopsContinue {
public static Void main () { for (Int i := 1; i <= 10; ++i) { Env.cur.out.print (i) if (i % 5 == 0) { Env.cur.out.printLine ("") continue } Env.cur.out.print (", ") } Env.cur.out.printLine ("") }
} </lang>
Forth
Although this code solves the task, there is no portable equivalent to "continue" for either DO-LOOPs or BEGIN loops. <lang forth>: main
11 1 do i dup 1 r. 5 mod 0= if cr else [char] , emit space then loop ;</lang>
Fortran
<lang fortran>do i = 1, 10
write(*, '(I0)', advance='no') i if ( mod(i, 5) == 0 ) then write(*,*) cycle end if write(*, '(A)', advance='no') ', '
end do</lang>
<lang fortran>C WARNING: This program is not valid ANSI FORTRAN 77 code. It uses C one nonstandard character on the line labelled 5001. Many F77 C compilers should be okay with it, but it is *not* standard. C C It is also worth noting that FORTRAN 77 uses the command CONTINUE, C but not in the semantic, looping sense of the word. In FORTRAN, C CONTINUE means "do absolutely nothing." It is a placeholder. If C anything, it means "continue to the next line." C C Python does the same thing with `pass`; C and its family of C languages, with `{/* do nothing */}`. Write CONTINUE when you need C to write something but have nothing to write. C C This page on Rosetta Code is about a very different "continue" C statement that tells a loop to go back to the beginning. In C FORTRAN, we use (you guessed it!) a GOTO to accomplish this.
PROGRAM CONTINUELOOP INTEGER I
DO 10 I = 1, 10
C Is it five or ten?
IF (MOD(I, 5) .EQ. 0) THEN
C If it is, write a newline and no comma.
WRITE (*,5000) I
C Continue the loop; that is, skip to the end of the loop.
GOTO 10 ENDIF
C Write I with a comma and no newline.
WRITE (*,5001) I
C Again, in this case, CONTINUE is completely unrelated to the C semantic, looping sense of the word.
10 CONTINUE
STOP
C This will print an integer and a newline (no comma).
5000 FORMAT (I3)
C Standard FORTRAN 77 is completely incapable of completing a C WRITE statement without printing a newline. If you want to print C five integers in standard code, you have to do something like C this: C C FORMAT (I3, ',', I3, ',', I3, ',', I3, ',', I3) C C Writing `1, 2, 3, 4, 5` and then `6, 7, 8, 9, 10` to that format C would produce the following two lines: C C 1, 2, 3, 4, 5 C 6, 7, 8, 9, 10 C C However, this code exists to demonstrate continuing a FORTRAN 77 C loop and not to demonstrate how to get around its rigidity about C newlines. C C The dollar sign at the end of the format is a nonstandard C character. It tells the compiler not to print a newline. If you C are actually using FORTRAN 77, you should figure out what your C particular compiler accepts. If you are actually using Fortran C 90 or later, you should replace this line with the commented C line that follows it.
5001 FORMAT (I3, ',', $)
C5001 FORMAT (I3, ',', ADVANCE='NO')
END</lang>
Relying instead upon the looping features of FORMAT
For historical reasons, 6 is often the default unit number for standard output. <lang Fortran>
WRITE (6,1) (I,I = 1,10) 1 FORMAT (4(1X,I0,","),1X,I0) END
</lang> Here the break and continuation comes through the workings of the FORMAT interpreter. The feature 4(etc) means four repetitions of the format items within the brackets, and as each datum from the WRITE statement arrives, it is aligned with the next format item that can receive a datum, the I-format specifier (here I0, which means an integer of only as many digits as are needed for the value) and until such a reciever is encountered, intervening format items are acted upon - 1X means "one space", and the quotes surround a text literal. Accordingly, the first datum generates a space, a one-digit value, and a comma, as does the second and so on. When the sixth datum is received, the end of the format statement has been reached, and the convention is to write the current line and start a new line of output, and further, go back in the FORMAT specification to the first-encountered open-bracket symbol (the rightmost) which in this case is not the beginning of the FORMAT statement but the one that has a repetition count of four in front of it, and, resume interpretation. When the last datum has been accepted, naturally, the line is printed.
An alternative might be FORMAT (4(I2,","),I2) but that would generate
1, 2, 3, 4, 5 6, 7, 8, 9,10
Alternatively, FORMAT (4(I2,","),I2,/,4(I2,","),I3) would do the trick but there would no longer be the loop, break, continue aspect to the interpretation of the FORMAT statement, merely a grinding through a list.
This sort of scheme facilitates a compact way of printing a table with a heading, where the WRITE statement simply pours forth the data and relies on something like FORMAT("heading",/,(complex details for one line)) - thus printing the table line-by-line with only the first line having the heading, a saving on having a write and format statement pair for the heading and a second pair for the table body.
FutureBasic
<lang futurebasic>include "NSLog.incl"
long num
for num = 1 to 10 if ( num mod 5 ) NSLog(@"%ld, \b",num) else NSLog(@"%ld") end if next
HandleEvents</lang>
Gambas
Click this link to run this code <lang gambas>Public Sub Main() Dim siCount As Short
For siCount = 1 To 10
Print siCount; If siCount <> 5 And siCount <> 10 Then Print ","; If siCount = 5 Then Print gb.NewLine;
Next
End</lang> Output:
1,2,3,4,5 6,7,8,9,10
GAP
<lang gap>for i in [1 .. 11] do
if RemInt(i, 5) = 0 then Print(i, "\n"); continue; fi; Print(i, ", ");
od;
- 1, 2, 3, 4, 5
- 6, 7, 8, 9, 10</lang>
GML
<lang GML>for(i = 1; i <= 10; i += 1)
{ show_message(string(i)) i += 1 if(i <= 10) continue }</lang>
Go
<lang go>package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ { fmt.Printf("%d", i) if i%5 == 0 { fmt.Printf("\n") continue } fmt.Printf(", ") }
}</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Groovy
<lang groovy>for (i in 1..10) {
print i if (i % 5 == 0) { println () continue } print ', '
}</lang>
Haskell
As a functional language, it is not idiomatic to have true loops - recursion is used instead. Below is one of many possible implementations of the task. The below code uses a guard (| symbol) to compose functions differently for the two alternative output paths, instead of using continue like in an imperative language.
<lang haskell>import Control.Monad (forM) main = forM [1..10] out
where out x | x `mod` 5 == 0 = print x | otherwise = (putStr . (++", ") . show) x</lang>
Haxe
<lang haxe>for (i in 1...11) {
Sys.print(i); if (i % 5 == 0) { Sys.print('\n'); continue; } Sys.print(', ');
}</lang>
HicEst
<lang hicest>DO i = 1, 10
IF( MOD(i, 5) == 1 ) THEN WRITE(Format="i3") i ELSE WRITE(APPend, Format=" ',', i3 ") i ENDIF
ENDDO </lang>
Icon and Unicon
The following code demonstrates the use of 'next' (the reserved word for 'continue'): <lang Icon>procedure main() every writes(x := 1 to 10) do {
if x % 5 = 0 then { write() next } writes(", ") }
end</lang> However, the output sequence can be written without 'next' and far more succinctly as: <lang Icon>every writes(x := 1 to 10, if x % 5 = 0 then "\n" else ", ")</lang>
Io
<lang io>for(i,1,10,
write(i) if(i%5 == 0, writeln() ; continue) write(" ,")
)</lang>
J
J is array-oriented, so there is very little need for loops. For example, one could satisfy this task this way:
<lang j>_2}."1'lq<, >'8!:2>:i.2 5</lang>
J does support loops for those times they can't be avoided (just like many languages support gotos for those time they can't be avoided). <lang j>3 : 0 ] 10
z=. for_i. 1 + i.y do. z =. z , ": i
if. 0 = 5 | i do. z 1!:2 ]2 z =. continue. end.
z =. z , ', ' end. i.0 0 )</lang>
Though it's rare to see J code like this.
Java
<lang java>for(int i = 1;i <= 10; i++){
System.out.print(i); if(i % 5 == 0){ System.out.println(); continue; } System.out.print(", ");
}</lang>
JavaScript
Using the print()
function from Rhino or SpiderMonkey.
<lang javascript>var output = "";
for (var i = 1; i <= 10; i++) {
output += i; if (i % 5 == 0) { print(output); output = ""; continue; } output += ", ";
}</lang>
Stepping back from any assumption that repetitive patterns of computation necessarily entail 'loops', and using a functional idiom of JavaScript, we can make the value of one or more subexpressions in a reduce() fold conditional on any special cases that we define.
For example:
<lang JavaScript>function rng(n) {
return n ? rng(n - 1).concat(n) : [];
}
console.log(
rng(10).reduce( function (a, x) { return a + x.toString() + (x % 5 ? ', ' : '\n'); }, )
);</lang>
Output: <lang JavaScript>1, 2, 3, 4, 5 6, 7, 8, 9, 10 </lang>
jq
jq does not have a "continue" statement. In jq 1.4, the simplest way to accomplish the given task is probably as follows: <lang jq>reduce range(1;11) as $i
(""; . + "\($i)" + (if $i % 5 == 0 then "\n" else ", " end))</lang>
Jsish
<lang javascript>/* Loop/continue in jsish */ for (var i = 1; i <= 10; i++) {
printf("%d", i); if (i % 5 == 0) { printf("\n"); continue; } printf(", ");
}</lang>
- Output:
prompt$ jsish loop-continue.jsi 1, 2, 3, 4, 5 6, 7, 8, 9, 10
Julia
<lang Julia> for i in 1:10
print(i) if i%5 == 0 println() continue end print(", ")
end </lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Kotlin
<lang scala>// version 1.1.2
fun main(args: Array<String>) {
for(i in 1 .. 10) { if (i % 5 == 0) { println(i) continue } print("$i, ") }
}</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Lambdatalk
<lang scheme> {def loops_continue
{lambda {:i} {if {> :i 10} then (end of loop) else {if {= :i 6} then {br}:i else :i} {if {= :i 10} then . else ,} {loops_continue {+ :i 1}}}}}
-> loops_continue
{loops_continue 0} -> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. (end of loop) </lang>
langur
<lang langur>for .i of 10 {
write .i if .i div 5 { writeln(); next } write ", "
}</lang>
Lasso
<lang Lasso>loop(10) => {^ loop_count loop_count % 5 ? ', ' | '\r' loop_count < 100 ? loop_continue 'Hello, World!' // never gets executed ^}</lang>
Lingo
<lang lingo>str = "" repeat with i = 1 to 10
put i after str if i mod 5 = 0 then put RETURN after str next repeat end if put ", " after str
end repeat put str</lang>
Lisaac
<lang Lisaac>1.to 10 do { i : INTEGER;
i.print; (i % 5 = 0).if { '\n'.print; } else { ','.print; };
};</lang>
LiveCode
<lang LiveCode>repeat with n = 1 to 10
put n if n is 5 then put return if n < 10 and n is not 5 then put ","
end repeat</lang>
Lua
<lang Lua>for i = 1, 10 do
io.write( i ) if i % 5 == 0 then io.write( "\n" ) else io.write( ", " ) end
end</lang> or <lang Lua>for i = 1, 10 do
io.write( i ) if i % 5 == 0 then io.write( "\n" ) goto continue end io.write( ", " ) ::continue::
end</lang>
M2000 Interpreter
<lang M2000 Interpreter> Module Checkit {
\\ A For {} loop For i=1 to 10 { Print i; if i mod 5 Else Print : continue Print ","; } Print i=11 \\ A For Next loop For i=1 to 10 Print i; if i mod 5 Else Print : continue Print ","; Next i Print i=11 \\ A for loop using a block and a Loop statement i=0 { i++ if i>10 then Exit loop Print i; if i mod 5 Else Print : continue Print ","; } Print i=11 \\ as above but end value for i=10 not 11 i=0 { i++ if i<10 then loop Print i; if i mod 5 Else Print : continue Print ","; } Print i=10 ' not 11 but 10
} Checkit </lang>
Maple
<lang Maple>for i from 1 to 10 do
printf( "%d", i ); if irem( i, 5 ) = 0 then printf( "\n" ); next end if; printf( ", " )
end do:</lang>
This can also be done as follows, but without the use of "next". <lang Maple>for i to 10 do
printf( "%d%s", i, `if`( irem( i, 5 ) = 0, "\n", ", " ) )
end do:</lang>
Mathematica/Wolfram Language
<lang Mathematica>tmp = ""; For[i = 1, i <= 10, i++,
tmp = tmp <> ToString[i]; If[Mod[i, 5] == 0, tmp = tmp <> "\n"; , tmp = tmp <> ", "; ]; ];
Print[tmp]</lang>
MATLAB / Octave
Loops are considered slow in Matlab and Octave, it is preferable to vectorize the code. <lang Matlab>disp([1:5; 6:10])</lang> or <lang Matlab>disp(reshape([1:10],5,2)')</lang>
A non-vectorized version of the code is shown below in Octave
<lang Matlab>for i = 1:10
printf(' %2d', i); if ( mod(i, 5) == 0 ) printf('\n'); continue end
end</lang>
Maxima
<lang maxima>/* There is no "continue" in Maxima, the easiest is using a "if" instead */ block(
[s: ""], for n thru 10 do ( s: sconcat(s, n), if mod(n, 5) = 0 then ( ldisp(s), s: "" ) else ( s: sconcat(s, ", ") ) )
)$</lang>
MAXScript
<lang maxscript>for i in 1 to 10 do (
format "%" i if mod i 5 == 0 then ( format "\n" continue ) continue format ", "
)</lang> Insert non-formatted text here
Metafont
Metafont has no a continue (or similar) keyword. As the Ada solution, we can complete the task just with conditional.
<lang metafont>string s; s := ""; for i = 1 step 1 until 10: if i mod 5 = 0:
s := s & decimal i & char10;
else:
s := s & decimal i & ", "
fi; endfor message s; end</lang>
Since message append always a newline at the end, we need to build a string and output it at the end, instead of writing the output step by step.
Note: mod is not a built in; like TeX, "bare Metafont" is rather primitive, and normally a set of basic macros is preloaded to make it more usable; in particular mod is defined as
<lang metafont>primarydef x mod y = (x-y*floor(x/y)) enddef;</lang>
Modula-3
Modula-3 defines the keyword RETURN as an exception, but when it is used with no arguments it works just like continue in C.
Note, however, that RETURN only works inside a procedure or a function procedure; use EXIT otherwise.
Module code and imports are omitted. <lang modula3>FOR i := 1 TO 10 DO
IO.PutInt(i); IF i MOD 5 = 0 THEN IO.Put("\n"); RETURN; END; IO.Put(", ");
END;</lang>
MOO
<lang moo>s = ""; for i in [1..10]
s += tostr(i); if (i % 5 == 0) player:tell(s); s = ""; continue; endif s += ", ";
endfor</lang>
Neko
<lang ActionScript>/**
Loops/Continue in Neko Tectonics: nekoc loops-continue.neko neko loops-continue
- /
var index = 0;
while index < 10 {
index += 1; $print(index); if $not($istrue(index % 5)) { $print("\n");
continue;
} $print(", ");
}</lang>
- Output:
prompt$ nekoc loops-continue.neko prompt$ neko loops-continue.n 1, 2, 3, 4, 5 6, 7, 8, 9, 10
Nemerle
<lang Nemerle>using System; using System.Console; using Nemerle.Imperative;
module Continue {
Main() : void { foreach (i in [1 .. 10]) { Write(i); when (i % 5 == 0) {WriteLine(); continue;} Write(", "); } }
}</lang>
NetRexx
<lang NetRexx>/* NetRexx */ options replace format comments java crossref savelog symbols nobinary
say say 'Loops/Continue'
nul = '\-' loop i_ = 1 to 10 say i_.right(2) || nul if i_ // 5 = 0 then do say iterate i_ end say ', ' || nul end i_
</lang>
NewLISP
<lang NewLISP>(for (i 1 10)
(print i) (if (= 0 (% i 5)) (println) (print ", ")))</lang>
Nim
<lang nim>for i in 1..10:
if i mod 5 == 0: echo i continue stdout.write i, ", "</lang>
NS-HUBASIC
<lang NS-HUBASIC>10 FOR I=1 TO 10 20 PRINT I; 30 IF I-I/5*5=0 THEN PRINT :GOTO 50"CONTINUE 40 PRINT ","; 50 NEXT</lang>
Objeck
<lang objeck>class Continue {
function : Main(args : String[]) ~ Nil { for(i := 1; i <= 10; i += 1;) { if(i = 5) { "{$i}, "->PrintLine(); continue; }; "{$i}, "->Print(); }; }
}</lang>
OCaml
There is no continue statement for for loops in OCaml, but it is possible to achieve the same effect with an exception. <lang ocaml># for i = 1 to 10 do
try print_int i; if (i mod 5) = 0 then raise Exit; print_string ", " with Exit -> print_newline() done ;;
1, 2, 3, 4, 5 6, 7, 8, 9, 10 - : unit = ()</lang> Though even if the continue statement does not exist, it is possible to add it with camlp4.
Octave
<lang octave>v = ""; for i = 1:10
v = sprintf("%s%d", v, i); if ( mod(i, 5) == 0 ) disp(v) v = ""; continue endif v = sprintf("%s, ", v);
endfor</lang>
Oforth
<lang Oforth>: loopCont | i |
10 loop: i [ i dup print 5 mod ifZero: [ printcr continue ] "," . ] ;</lang>
Ol
We use continuation to break the execution of the inner body. <lang scheme> (let loop ((i 1))
(when (less? i 11) (call/cc (lambda (continue) (display i) (when (zero? (mod i 5)) (print) (continue #f)) (display ", "))) (loop (+ i 1))))
</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Oz
By using the "continue" feature of the for-loop, we bind C to a nullary procedure which, when invoked, immediately goes on to the next iteration of the loop. <lang oz>for I in 1..10 continue:C do
{System.print I} if I mod 5 == 0 then {System.printInfo "\n"} {C} end {System.printInfo ", "}
end</lang>
PARI/GP
<lang parigp>for(n=1,10,
print1(n); if(n%5 == 0, print();continue); print1(", ")
)</lang>
Pascal
See Delphi
Perl
<lang perl>foreach (1..10) {
print $_; if ($_ % 5 == 0) { print "\n"; next; } print ', ';
}</lang>
It is also possible to use a goto statement to jump over the iterative code section for a particular loop:
<lang perl>foreach (1..10) {
print $_; if ($_ % 5 == 0) { print "\n"; goto MYLABEL; } print ', ';
MYLABEL: }</lang>
Phix
with javascript_semantics for i=1 to 10 do printf(1,"%d", i) if remainder(i,5)=0 then printf(1, "\n") continue end if printf(1,", ") end for
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
The following works just as well, with identical output
with javascript_semantics for i=1 to 10 do printf(1,"%d", i) if remainder(i,5)=0 then printf(1, "\n") else printf(1,", ") end if end for
PHP
<lang php>for ($i = 1; $i <= 10; $i++) {
echo $i; if ($i % 5 == 0) { echo "\n"; continue; } echo ', ';
}</lang>
Picat
Picat doesn't have a continue statement. So I just use a conditional that ends the body of the predicate.
<lang Picat> main =>
foreach (I in 1..10) printf("%d", I), if (I mod 5 == 0) then nl else printf(", ") end, end.
</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
PicoLisp
PicoLisp doesn't have an explicit 'continue' functionality. It can always be emulated with a conditional expression. <lang PicoLisp>(for I 10
(print I) (if (=0 (% I 5)) (prinl) (prin ", ") ) )</lang>
Pike
<lang pike>int main(){
for(int i = 1; i <= 10; i++){ write(sprintf("%d",i)); if(i % 5 == 0){ write("\n"); continue; } write(", "); }
}</lang>
PL/I
<lang pli>loop: do i = 1 to 10;
put edit (i) (f(3)); if mod(i,5) = 0 then do; put skip; iterate loop; end; put edit (', ') (a);
end;</lang>
Plain English
In Plain English, continue is spelled repeat
and is the only way to specify an end of a loop.
<lang plainenglish>To run:
Start up.
Demonstrate continue.
Wait for the escape key.
Shut down.
To demonstrate continue: If a counter is past 10, exit. Convert the counter to a string. Write the string on the console without advancing. If the counter is evenly divisible by 5, write "" on the console; repeat. Write ", " on the console without advancing. Repeat.</lang>
Pop11
<lang pop11>lvars i; for i from 1 to 10 do
printf(i, '%p'); if i rem 5 = 0 then printf('\n'); nextloop; endif; printf(', ')
endfor;</lang>
PowerShell
<lang powershell>for ($i = 1; $i -le 10; $i++) {
Write-Host -NoNewline $i if ($i % 5 -eq 0) { Write-Host continue } Write-Host -NoNewline ", "
}</lang>
Prolog
Prolog doesn't have a continue statement. So I just use a conditional that ends the body of the predicate.
<lang Prolog>
- - initialization(main).
print_list(Min, Max) :-
Min < Max, write(Min), Min1 is Min + 1, ( Min mod 5 =:= 0 -> nl ; write(',') ), print_list(Min1, Max).
print_list(Max, Max) :-
write(Max), nl.
main :-
print_list(1, 10).
</lang>
- Output:
1,2,3,4,5 6,7,8,9,10
Python
<lang python>for i in xrange(1,11):
if i % 5 == 0: print i continue print i, ",",</lang>
Quackery
<lang quackery>10 times
[ i^ 1+ dup echo 5 mod 0 = iff cr done say ", " ]</lang>
R
<lang R>for(i in 1:10) {
cat(i) if(i %% 5 == 0) { cat("\n") next } cat(", ")
}</lang>
Racket
It is possible to skip loop iterations in Racket, but an explicit continue construct is rarely used:
<lang racket>
- lang racket
- Idiomatic way
(for ([i (in-range 1 11)])
(if (= (remainder i 5) 0) (printf "~a~n" i) (printf "~a, " i)))
- Forces a skip, but not idiomatic because
- the logic is less obvious
(for ([i (in-range 1 11)]
#:unless (and (= (remainder i 5) 0) (printf "~a~n" i))) (printf "~a, " i))
</lang>
Raku
(formerly Perl 6)
<lang perl6>for 1 .. 10 {
.print; if $_ %% 5 { print "\n"; next; } print ', ';
}</lang>
or without using a loop:
<lang perl6>$_.join(", ").say for [1..5], [6..10];</lang>
REBOL
<lang REBOL>REBOL [ Title: "Loop/Continue" URL: http://rosettacode.org/wiki/Loop/Continue ]
- REBOL does not provide a 'continue' word for loop constructs,
- however, you may not even miss it
print "One liner (compare to ALGOL 68 solution):" repeat i 10 [prin rejoin [i either 0 = mod i 5 [crlf][", "]]]
print [crlf "Port of ADA solution:"] for i 1 10 1 [ prin i either 0 = mod i 5 [ prin newline ][ prin ", " ] ]</lang>
- Output:
One liner (compare to ALGOL 68 solution): 1, 2, 3, 4, 5 6, 7, 8, 9, 10 Port of ADA solution: 1, 2, 3, 4, 5 6, 7, 8, 9, 10
Red
<lang Red>repeat i 10 [
prin i if i = 10 [break] either i = 5 [print ""][prin ","]
] 1,2,3,4,5 6,7,8,9,10</lang>
REXX
version 1
(This program could be simpler by using a then/else construct, but an iterate was used to conform to the task.) <lang rexx>/*REXX program illustrates an example of a DO loop with an ITERATE (continue). */
do j=1 for 10 /*this is equivalent to: DO J=1 TO 10 */ call charout , j /*write the integer to the terminal. */ if j//5\==0 then do /*Not a multiple of five? Then ··· */ call charout , ", " /* write a comma to the terminal, ··· */ iterate /* ··· & then go back for next integer.*/ end say /*force REXX to display on next line. */ end /*j*/ /*stick a fork in it, we're all done. */</lang>
Program note: the comma (,) immediately after the charout BIF indicates to use the terminal output stream.
output
1, 2, 3, 4, 5 6, 7, 8, 9, 10
version 2
<lang rexx>/*REXX program illustrates an example of a DO loop with an ITERATE (continue). */ $= /*nullify the variable used for display*/
do j=1 for 10 /*this is equivalent to: DO J=1 TO 10 */ $=$ || j', ' /*append the integer to a placeholder. */ if j//5==0 then say left($, length($) - 2) /*Is J a multiple of five? Then SAY.*/ if j==5 then $= /*start the display line over again. */ end /*j*/ /*stick a fork in it, we're all done. */</lang>
output is the same as the 1st REXX version.
Ring
<lang ring> for i = 1 TO 10
see i if i % 5 = 0 see nl loop ok see ", "
next </lang>
Ruby
<lang ruby>for i in 1..10 do
print i if i % 5 == 0 then puts next end print ', '
end</lang> The "for" look could be written like this: <lang ruby>(1..10).each do |i| ... 1.upto(10) do |i| ... 10.times do |n| i=n+1; ...</lang> Without meeting the criteria (showing loop continuation), this task could be written as: <lang ruby>(1..10).each_slice(5){|ar| puts ar.join(", ")}</lang>
Rust
<lang rust>fn main() {
for i in 1..=10 { print!("{}", i); if i % 5 == 0 { println!(); continue; } print!(", "); }
}</lang>
Salmon
<lang Salmon>iterate (x; [1...10])
{ print(x); if (x % 5 == 0) { print("\n"); continue; }; print(", "); };</lang>
Sather
There's no continue!
in Sather. The code solve the task without forcing a new iteration.
<lang sather>class MAIN is
main is i:INT; loop i := 1.upto!(10); #OUT + i; if i%5 = 0 then #OUT + "\n"; else #OUT + ", "; end; end; end;
end;</lang>
Scala
Scala doesn't have a continue
keyword.
However, you may not even miss it, if
could be used here.
The intuitive way
<lang scala>for (i <- 1 to 10) {
print(i) if (i % 5 == 0) println() else print(", ") }</lang>
Functional solution
Thinking In Scala© says: we avoid for loops and handle it the Functional way:
- Create a Range 1..10 included
- Split the range after converting to a List to a pair of List's
- A List of the elements of pair of will be created: List(List(1,2,3,4,5),List(6,7,8,9,10))
- The map makes for both elements in the List a conversion to a comma separated String, yielding a List of two Strings.
- Both comma separated strings will be separated by an EOL
<lang scala> val a = (1 to 10 /*1.*/ ).toList.splitAt(5) //2.
println(List(a._1, a._2) /*3.*/ .map(_.mkString(", ") /*4.*/ ).mkString("\n") /*5.*/ )</lang>
Scheme
<lang scheme>(define (loop i)
(if (> i 10) 'done (begin (display i) (cond ((zero? (modulo i 5)) (newline) (loop (+ 1 i))) (else (display ", ") (loop (+ 1 i)))))))</lang>
Scilab
<lang>for i=1:10
printf("%2d ",i) if modulo(i,5)~=0 then printf(", ") continue end printf("\n")
end </lang>
- Output:
1 , 2 , 3 , 4 , 5 6 , 7 , 8 , 9 , 10
Sidef
<lang ruby>for i in (1..10) {
print i if (i %% 5) { print "\n" next } print ', '
}</lang>
Simula
<lang simula>! Loops/Continue - simula67 - 07/03/2017; begin
integer i; for i:=1 step 1 until 10 do begin outint(i,5); if mod(i,5)=0 then begin outimage; goto loop end; outtext(", "); loop: end end</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Smalltalk
actually works with all dialects ¹
<lang Smalltalk> 1 to: 10 do: [ :i |
[ :continue | i % 5 = 0 ifTrue: [ Transcript show: i; cr. continue value ]. Transcript show: i; show: ', '. ] valueWithExit.
] </lang> ¹ if valueWithExit is not present in the Block class, it can be added as: <lang Smalltalk>valueWithExit
^ self value:[^ nil]</lang>
Spin
<lang Spin>con
_clkmode = xtal1 + pll16x _clkfreq = 80_000_000
obj
ser : "FullDuplexSerial.spin"
pub main | i
ser.start(31, 30, 0, 115200)
repeat i from 1 to 10 ser.dec(i) if i // 5 ser.str(string(", ")) next ser.str(string(13,10))
waitcnt(_clkfreq + cnt) ser.stop cogstop(0)</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
SPL
<lang spl>> n, 1..10
s += n ? n%5, s += ", " >> n%5 #.output(s) s = ""
<</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
SQL PL
version 9.7 or higher.
With SQL PL: <lang sql pl> --#SET TERMINATOR @
SET SERVEROUTPUT ON @
BEGIN
DECLARE I SMALLINT DEFAULT 1;
Loop: WHILE (I <= 10) DO CALL DBMS_OUTPUT.PUT(I); SET I = I + 1; IF (MOD(I - 1, 5) = 0) THEN CALL DBMS_OUTPUT.PUT_LINE(' '); ITERATE Loop; END IF; CALL DBMS_OUTPUT.PUT(', '); END WHILE Loop;
END @ </lang> Output:
db2 => BEGIN ... db2 (cont.) => END @ DB20000I The SQL command completed successfully. 1, 2, 3, 4, 5 6, 7, 8, 9, 10
Stata
See continue in Stata help. Notice that the _continue option of display has another purpose: it suppresses the automatic newline at the end of the display command.
<lang stata>forvalues n=1/10 { display `n' _continue if mod(`n',5)==0 { display continue } display ", " _continue }</lang>
Suneido
<lang Suneido>ob = Object() for (i = 1; i <= 10; ++i)
{ ob.Add(i) if i is 5 { Print(ob.Join(',')) ob = Object() } }
Print(ob.Join(','))</lang>
- Output:
<lang Suneido>1,2,3,4,5 6,7,8,9,10 ok</lang>
Swift
<lang swift>for i in 1...10 {
print(i, terminator: "") if i % 5 == 0 { print() continue } print(", ", terminator: "")
}</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Tcl
<lang tcl>for {set i 1} {$i <= 10} {incr i} {
puts -nonewline $i if {$i % 5 == 0} { puts "" continue } puts -nonewline ", "
}</lang>
Transact-SQL
<lang Transact-SQL> DECLARE @i INT = 0; DECLARE @str VarChar(40) = ; WHILE @i<10
BEGIN SET @i = @i + 1; SET @str = @str + CONVERT(varchar(2),@i); IF @i % 5 = 0 BEGIN PRINT @str; SET @str = CONTINUE; END SET @str = @str +', '; END;
</lang>
TUSCRIPT
<lang tuscript> $$ MODE TUSCRIPT numbers="" LOOP n=1,10 numbers=APPEND (numbers,", ",n) rest=n%5 IF (rest!=0) CYCLE
PRINT numbers numbers=""
ENDLOOP </lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
UNIX Shell
<lang bash>Z=1 while (( Z<=10 )); do
echo -e "$Z\c" if (( Z % 5 != 0 )); then echo -e ", \c" else echo -e "" fi (( Z++ ))
done</lang>
<lang bash>for ((i=1;i<=10;i++)); do
echo -n $i if [ $((i%5)) -eq 0 ]; then echo continue fi echo -n ", "
done</lang>
UnixPipes
<lang bash>yes \ | cat -n | head -n 10 | xargs -n 5 echo | tr ' ' ,</lang>
Ursa
<lang ursa>decl int i for (set i 1) (< i 11) (inc i)
if (= (mod i 5) 0) out i endl console continue end if out i ", " console
end for</lang>
Vala
<lang vala>for (int i = 1; i <= 10; i++) {
stdout.printf("%d", i); if (i % 5 == 0) { stdout.printf("\n"); continue; } stdout.printf(", ");
}</lang>
VBA
<lang VB>Public Sub LoopContinue()
Dim value As Integer For value = 1 To 10 Debug.Print value; If value Mod 5 = 0 Then 'VBA does not have a continue statement Debug.Print Else Debug.Print ","; End If Next value
End Sub</lang>
Vedit macro language
<lang vedit>for (#1 = 1; #1 <= 10; #1++) {
Num_Type(#1, LEFT+NOCR) if (#1 % 5 == 0) { Type_Newline Continue } Message(", ")
}</lang>
Vlang
<lang vlang>fn main() {
for i in 1..11 { print(i) if i%5==0{ println() continue } print(', ') }
}</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Wren
From v0.4.0 Wren has a continue keyword which works in the expected fashion. <lang ecmascript>for (i in 1..10) {
System.write(i) if (i%5 == 0) { System.print() continue } System.write(", ")
}
System.print()</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
X86 Assembly
The code got really long, because i manually convert the numbers to ASCII, which gets harder with multiple digits(the number 10). The way you implement continue in X86 Assembly is the same way as how you would create a loop: you just implement a (conditional) jump to another line of code. <lang asm> extern _printf
section .data
output db 0,0,0,0 reversedOutput db 0,0
section .text global _main _main:
mov ecx, 0 looping: inc ecx mov eax, ecx push ecx cmp ecx, 5 je do5 cmp ecx, 10 je do10 don: call createOutput mov [eax+1], byte 0x2c mov [eax+2], byte 0x20 push eax call _printf add esp, 4 pop ecx jmp looping do5: call createOutput mov [eax+1], byte 0x0a push eax call _printf add esp, 4 pop ecx jmp looping do10: call createOutput mov [eax+2], byte 0x0a push eax call _printf add esp, 4 pop ecx xor eax, eax ret
createOutput: ;parameter in eax
;eax between 1 and 99 push ebx mov ecx, 0 clearOutput: mov [output+ecx], byte 0 cmp ecx, 3 je next inc ecx jmp clearOutput next: mov ecx, 0 mov ebx, 10 cOlooping: xor edx, edx div ebx mov [reversedOutput+ecx], dl add [reversedOutput+ecx], byte 0x30 cmp eax, 0 je reverse cmp ecx, 1 je reverse inc ecx jmp cOlooping reverse: mov ecx, -1 mov ebx, 0 name: inc ecx neg ecx mov dl, [reversedOutput+ecx+1] neg ecx cmp dl, 0 je name mov [output + ebx], dl inc ebx cmp ecx, 1 jl name mov eax, output pop ebx ret
</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
XBasic
<lang xbasic> PROGRAM "loopcontinue"
DECLARE FUNCTION Entry()
FUNCTION Entry()
FOR i% = 1 TO 10 PRINT i%; IF i% MOD 5 = 0 THEN PRINT DO NEXT ' It looks like DO FOR backs to the FOR with the current value of i% END IF PRINT ", "; NEXT i%
END FUNCTION END PROGRAM </lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
XPL0
Like Ada and ALGOL there's no 'continue' command. The task is solved very simply anyway. The commands 'int' and 'rem' are shown spelled out here. Only the first three characters of a command are required.
<lang XPL0>code CrLf=9, IntOut=11, Text=12; integer N; for N:= 1 to 10 do
[IntOut(0, N); if remainder(N/5) \#0\ then Text(0, ", ") else CrLf(0)]</lang>
- Output:
1, 2, 3, 4, 5 6, 7, 8, 9, 10
Yabasic
<lang yabasic>for i = 1 to 10
print str$(i); if mod(i, 5) = 0 then print continue end if print ", ";
next print end</lang>
zkl
<lang zkl>foreach n in ([1..10]){print(n); if(n%5==0){println(); continue;} print(", ")} // or foreach n in ([1..10]){print(n,(n%5) and ", " or "\n")}</lang>
Zig
<lang zig>const std = @import("std");
pub fn main() !void {
const stdout_wr = std.io.getStdOut().writer(); var i: i8 = 1; while (i <= 10) : (i += 1) { try stdout_wr.print("{d}", .{i}); if (i == 5) { try stdout_wr.writeAll("\n"); continue; } try stdout_wr.writeAll(", "); }
}</lang>
- Programming Tasks
- Iteration
- Loop modifiers
- GUISS/Omit
- M4/Omit
- 11l
- 360 Assembly
- Ada
- Agena
- Aikido
- ALGOL 60
- ALGOL 68
- ALGOL W
- AppleScript
- Arturo
- AutoHotkey
- AWK
- BASIC
- Applesoft BASIC
- BASIC256
- BBC BASIC
- Commodore BASIC
- FreeBASIC
- IS-BASIC
- Liberty BASIC
- PureBasic
- QB64
- Run BASIC
- Sinclair ZX81 BASIC
- TI-89 BASIC
- True BASIC
- VB-DOS, PDS
- Visual Basic .NET
- Bc
- Befunge
- Bracmat
- C
- C sharp
- C++
- Chapel
- Clipper
- Clojure
- COBOL
- ColdFusion
- Common Lisp
- D
- Dc
- Delphi
- DWScript
- Dyalect
- Ela
- Elixir
- Erlang
- ERRE
- Euphoria
- F Sharp
- Factor
- Fantom
- Forth
- Fortran
- FutureBasic
- Gambas
- GAP
- GML
- Go
- Groovy
- Haskell
- Haxe
- HicEst
- Icon
- Unicon
- Io
- J
- Java
- JavaScript
- Jq
- Jsish
- Julia
- Kotlin
- Lambdatalk
- Langur
- Lasso
- Lingo
- Lisaac
- LiveCode
- Lua
- M2000 Interpreter
- Maple
- Mathematica
- Wolfram Language
- MATLAB
- Octave
- Maxima
- MAXScript
- Metafont
- Modula-3
- MOO
- Neko
- Nemerle
- NetRexx
- NewLISP
- Nim
- NS-HUBASIC
- Objeck
- OCaml
- Oforth
- Ol
- Oz
- PARI/GP
- Pascal
- Perl
- Phix
- Phix/basics
- PHP
- Picat
- PicoLisp
- Pike
- PL/I
- Plain English
- Pop11
- PowerShell
- Prolog
- Python
- Quackery
- R
- Racket
- Raku
- REBOL
- Red
- REXX
- Ring
- Ruby
- Rust
- Salmon
- Sather
- Scala
- Scheme
- Scheme examples needing attention
- Examples needing attention
- Scilab
- Sidef
- Simula
- Smalltalk
- Spin
- SPL
- SQL PL
- Stata
- Suneido
- Swift
- Tcl
- Transact-SQL
- TUSCRIPT
- UNIX Shell
- UnixPipes
- Ursa
- Vala
- VBA
- Vedit macro language
- Vlang
- Wren
- X86 Assembly
- XBasic
- XPL0
- Yabasic
- Zkl
- Zig