Loops/Continue: Difference between revisions

From Rosetta Code
Content added Content deleted
(Improved D entry)
Line 263: Line 263:


<lang ela>open Con
<lang ela>open Con
open Imperative


let loop n | n > 10 = ()
let loop n | n > 10 = ()
Line 271: Line 272:
loop 1</lang>
loop 1</lang>


Function rec creates a cyclic version of a given function, it is defined in standard Prelude as 'let rec f x = f x $ rec f' where '$' is a sequencing operator.
Function rec creates a cyclic version of a given function, it is defined in Imperative module as 'let rec f x = f x $ rec f' where '$' is a sequencing operator.


===Using list===
===Using list===

Revision as of 15:56, 28 May 2012

Task
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 within 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>

Aikido

<lang aikido>foreach i 1..10 {

   print (i)
   if ((i % 5) == 0) {
       println()
       continue
   } 
   print (", ")

}</lang>

ALGOL 68

Works with: ALGOL 68 version Revision 1 - no extensions to language used
Works with: ALGOL 68G version Any - tested with release 1.18.0-9h.tiny
Works with: ELLA ALGOL 68 version Any (with appropriate job cards) - tested with release 1.8-8d

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

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>

bc

Requires a bc with the print and continue statements. POSIX bc has not these statements.

Works with: OpenBSD bc

<lang bc>for (i = 1; i <= 10; i++) { print i if (i % 5) { print ", " continue } print "\n" } quit</lang>

C

Translation of: C++

<lang c>for(int i = 1;i <= 10; i++){

  printf("%d", i);
  if(i % 5 == 0){
     printf("\n");
     continue;
  }
  printf(", ");

}</lang>

C++

Translation of: Java

<lang cpp>for(int i = 1;i <= 10; i++){

  cout << i;
  if(i % 5 == 0){
     cout << endl;
     continue;
  }
  cout << ", ";

}</lang>

C#

Translation of: Java

<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>

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)]
 (do
   (print n)
   (if (= (rem n 5) 0) (print "\n") (print ", "))))</lang>

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

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.

Translation of: bc
Works with: OpenBSD dc

<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>

Ela

Direct Approach

<lang ela>open Con open Imperative

let loop n | n > 10 = ()

          | else = rec write n f $ loop (n+1)
                   where f | n % 5 == 0 = "\r\n"
                           | else = ", "

loop 1</lang>

Function rec creates a cyclic version of a given function, it is defined in Imperative module as 'let rec f x = f x $ rec f' where '$' is a sequencing operator.

Using list

<lang ela>open Con

let loop [] = ()

   loop (x::xs) = rec write x c $ loop xs
           where c | x % 5 == 0 = "\r\n"
                   | else = ", "

loop [1..10]</lang>

This version is more generic and can work for any given range of values.

Euphoria

Works with: Euphoria version 4.0.3, 4.0.0 or later

<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>

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

Works with: Fortran version 90 and later

<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>

Works with: Fortran version 77 and later

<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>

GAP

<lang gap>for i in [1 .. 11] do

   if RemInt(i, 5) = 0 then
       Print(i, "\n");
       continue;
   fi;
   Print(i, ", ");

od;

  1. 1, 2, 3, 4, 5
  2. 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) = (putStrLn . show) x
           | otherwise = (putStr . (++", ") . show) x</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>

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>

Liberty BASIC

<lang lb> for i =1 to 10

   if i mod 5 <>0 then print i; ", "; else print i

next i end </lang>

Lisaac

<lang Lisaac>1.to 10 do { i : INTEGER;

 i.print;
 (i % 5 = 0).if { '\n'.print; } else { ','.print; };

};</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>

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>

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>


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>

Nemerle

Translation of: C#

<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>

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>

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>

Perl 6

Translation of: Perl
Works with: Rakudo Star version 2010.08

<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>

PHP

<lang php>for ($i = 1; $i <= 10; $i++) {

   echo $i;
   if ($i % 5 == 0) {
       echo "\n";
       continue;
   }
   echo ', ';

}</lang>

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 PL/I>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>

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

Translation of: C

<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>

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>

Python

<lang python>for i in xrange(1,11):

   if i % 5 == 0:
       print i
       continue
   print i, ",",</lang>

R

Translation of: C++

<lang R>for(i in 1:10) {

  cat(i)
  if(i %% 5 == 0) 
  {
     cat("\n")
     next
  }
  cat(", ")

}</lang>

REBOL

<lang REBOL>REBOL [ Title: "Loop/Continue" Author: oofoe Date: 2010-01-05 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

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> 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.upto(10) {|i| print "%d%s" % [i, i%5==0 ? "\n" : ", "]}</lang>

Run BASIC

<lang runbasic>for i = 1 to 10

   if i mod 5 <> 0 then print i;", "; else print i

next i</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. if could be used here. <lang scala>for(i <- 1 to 10) {

 print(i)
 if (i%5==0) println() else print(", ")

}</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>

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>

Tcl

<lang tcl>for {set i 1} {$i <= 10} {incr i} {

  puts -nonewline $i
  if {$i % 5 == 0} {
     puts ""
     continue
  }
  puts -nonewline ", "

}</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.

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

UnixPipes

<lang bash>yes \ | cat -n | head -n 10 | xargs -n 5 echo | tr ' ' ,</lang>

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>

Works with: Bash

<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>

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>

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>