Loops/Continue
You are encouraged to solve this task according to the task description, using any language you may know.
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 whitin the loop upon a specific condition, if your language allows it.
Ada
Ada 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 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 mod 5 = 0 then New_Line; else Put(","); end if; end loop;
end Loop_Continue; </lang>
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:
FOR i FROM 1 TO 10 DO print ((i, IF i MOD 5 = 0 THEN new line ELSE "," FI )) OD
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>
C
<lang c>for(int i = 1;i <= 10; i++){
printf("%d", i); if(i % 5 == 0){ printf("\n"); continue; } printf(", ");
}</lang>
C++
<lang cpp>for(int i = 1;i <= 10; i++){
cout << i; if(i % 5 == 0){ cout << endl; continue; } cout << ", ";
}</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>
ColdFusion
Remove the leading space from the line break tag.
<cfscript> for( i = 1; i <= 10; i++ ) { writeOutput( i ); if( 0 == i % 5 ) { writeOutput( "< br />" ); continue; } writeOutput( "," ); } </cfscript>
D
<lang d>for(int i = 1;i <= 10; i++){
writef(i); if(i % 5 == 0){ writefln(); continue; } writef(", ");
}</lang>
E
<lang e>for i in 1..10 {
print(i) if (i %% 5 == 0) { println() continue } print(", ")
}</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>
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) = (putStrLn . show) x | otherwise = (putStr . (++", ") . show) x</lang>
J
J is array-oriented, so there is very little need for loops. For example, one could satisfy this task this way:
_2}."1'lq<, >'8!:2>:i.2 5
J does support loops for those times they can't be avoided (just like many languages support gotos for those time they can't be avoided).
3 : 0 ] 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 )
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>
Mathematica
<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>
MAXScript
for i in 1 to 10 do ( format "%" i if mod i 5 == 0 then ( format "\n" continue ) continue format ", " )
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.
FOR i := 1 TO 10 DO IO.PutInt(i); IF i MOD 5 = 0 THEN IO.Put("\n"); RETURN; END; IO.Put(", "); END;
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>
Perl
<lang perl>foreach (1..10) {
print $_; if ($_ % 5 == 0) { print "\n"; next; } print ', ';
}</lang>
PHP
<lang php>for ($i = 1; $i <= 10; $i++) {
echo $i; if ($i % 5 == 0) { echo "\n"; continue; } echo ', ';
}</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;
Python
<lang python>for i in xrange(1,11):
if i % 5 == 0: print i continue print i, ",",</lang>
REXX
(Remember that there exists implementations of the REXX language that needs that the source begins with /*, i.e. with a comment) <lang rexx>do i = 1 to 10
call charout ,i", " if i//5 = 0 then do say iterate end
end</lang>
Ruby
<lang ruby>for i in 1..10 do
print i if i % 5 == 0 then puts next end print ', '
end</lang>
Tcl
<lang tcl>for {set i 1} {$i <= 10} {incr i} {
puts -nonewline $i if {$i % 5 == 0} { puts "" continue } puts -nonewline ", "
}</lang>
UnixPipes
yes \ | cat -n | head -n 10 | xargs -n 5 echo | tr ' ' ,
Visual Basic .NET
For i = 1 To 10 Console.Write(i) If i Mod 5 = 0 Then Console.WriteLine() Else Console.Write(", ") End If Next