For loop

Last updated
Flow diagram of the following for loop code:
for (i = 0; i < 5; i++) printf("*");
The loop will cause five asterisks to be printed. For loop example.svg
Flow diagram of the following for loop code:
for(i=0;i<5;i++)printf("*");
The loop will cause five asterisks to be printed.

In computer science, a for-loop or for loop is a control flow statement for specifying iteration. Specifically, a for-loop functions by running a section of code repeatedly until a certain condition has been satisfied.

Contents

For-loops have two parts: a header and a body. The header defines the iteration and the body is the code executed once per iteration. The header often declares an explicit loop counter or loop variable. This allows the body to know which iteration is being executed. For-loops are typically used when the number of iterations is known before entering the loop. For-loops can be thought of as shorthands for while-loops which increment and test a loop variable.

Various keywords are used to indicate the usage of a for loop: descendants of ALGOL use "for", while descendants of Fortran use "do". There are other possibilities, for example COBOL which uses PERFORM VARYING.

The name for-loop comes from the word for. For is used as the reserved word (or keyword) in many programming languages to introduce a for-loop. The term in English dates to ALGOL 58 and was popularized in ALGOL 60. It is the direct translation of the earlier German für and was used in Superplan (1949–1951) by Heinz Rutishauser. Rutishauser was involved in defining ALGOL 58 and ALGOL 60. [1] The loop body is executed "for" the given values of the loop variable. This is more explicit in ALGOL versions of the for statement where a list of possible values and increments can be specified.

In Fortran and PL/I, the keyword DO is used for the same thing and it is named a do-loop; this is different from a do while loop .

FOR

For loop illustration, from i=0 to i=2, resulting in data1=200 For loop.svg
For loop illustration, from i=0 to i=2, resulting in data1=200

A for-loop statement is available in most imperative programming languages. Even ignoring minor differences in syntax, there are many differences in how these statements work and the level of expressiveness they support. Generally, for-loops fall into one of four categories:

Traditional for-loops

The for-loop of languages like ALGOL, Simula, BASIC, Pascal, Modula, Oberon, Ada, MATLAB, OCaml, F#, and so on, requires a control variable with start- and end-values, which looks something like this:

fori=firsttolastdostatement(* or just *)fori=first..lastdostatement

Depending on the language, an explicit assignment sign may be used in place of the equal sign (and some languages require the word int even in the numerical case). An optional step-value (an increment or decrement ≠ 1) may also be included, although the exact syntaxes used for this differ a bit more between the languages. Some languages require a separate declaration of the control variable, some do not.

Another form was popularized by the C language. It requires 3 parts: the initialization (loop variant), the condition, and the advancement to the next iteration. All these three parts are optional. This type of "semicolon loops" came from B programming language and it was originally invented by Stephen Johnson. [2]

In the initialization part, any variables needed are declared (and usually assigned values). If multiple variables are declared, they should all be the same type. The condition part checks a certain condition and exits the loop if false, even if the loop is never executed. If the condition is true, then the lines of code inside the loop are executed. The advancement to the next iteration part is performed exactly once every time the loop ends. The loop is then repeated if the condition evaluates to true.

Here is an example of the C-style traditional for-loop in Java.

// Prints the numbers from 0 to 99 (and not 100), each followed by a space.for(inti=0;i<100;i++){System.out.print(i);System.out.print(' ');}System.out.println();

These loops are also sometimes named numeric for-loops when contrasted with foreach loops (see below).

Iterator-based for-loops

This type of for-loop is a generalization of the numeric range type of for-loop, as it allows for the enumeration of sets of items other than number sequences. It is usually characterized by the use of an implicit or explicit iterator, in which the loop variable takes on each of the values in a sequence or other data collection. A representative example in Python is:

foraniteminsome_iterable_object:do_something()do_something_else()

Where some_iterable_object is either a data collection that supports implicit iteration (like a list of employee's names), or may be an iterator itself. Some languages have this in addition to another for-loop syntax; notably, PHP has this type of loop under the name for each, as well as a three-expression for-loop (see below) under the name for.

Vectorised for-loops

Some languages offer a for-loop that acts as if processing all iterations in parallel, such as the for all keyword in Fortran 95 which has the interpretation that all right-hand-side expressions are evaluated before any assignments are made, as distinct from the explicit iteration form. For example, in the for statement in the following pseudocode fragment, when calculating the new value for A(i), except for the first (with i = 2) the reference to A(i - 1) will obtain the new value that had been placed there in the previous step. In the for all version, however, each calculation refers only to the original, unaltered A.

for     i := 2 : N - 1 do A(i) := [A(i - 1) + A(i) + A(i + 1)] / 3; next i; for all i := 2 : N - 1 do A(i) := [A(i - 1) + A(i) + A(i + 1)] / 3;

The difference may be significant.

Some languages (such as PL/I, Fortran 95) also offer array assignment statements, that enable many for-loops to be omitted. Thus pseudocode such as A:= 0; would set all elements of array A to zero, no matter its size or dimensionality. The example loop could be rendered as

A(2:N-1):=[A(1:N-2)+A(2:N-1)+A(3:N)]/3;

But whether that would be rendered in the style of the for-loop or the for-all-loop or something else may not be clearly described in the compiler manual.

Compound for-loops

Introduced with ALGOL 68 and followed by PL/I, this allows the iteration of a loop to be compounded with a test, as in

for i := 1 : N while A(i) > 0 do etc.

That is, a value is assigned to the loop variable i and only if the while expression is true will the loop body be executed. If the result were false the for-loop's execution stops short. Granted that the loop variable's value is defined after the termination of the loop, then the above statement will find the first non-positive element in array A (and if no such, its value will be N + 1), or, with suitable variations, the first non-blank character in a string, and so on.

Loop counters

In computer programming, a loop counter is a control variable that controls the iterations of a loop (a computer programming language construct). It is so named because most uses of this construct result in the variable taking on a range of integer values in some orderly sequences (for example., starting at 0 and ending at 10 in increments of 1)

Loop counters change with each iteration of a loop, providing a unique value for each iteration. The loop counter is used to decide when the loop should terminate and for the program flow to continue to the next instruction after the loop.

A common identifier naming convention is for the loop counter to use the variable names i, j, and k (and so on if needed), where i would be the most outer loop, j the next inner loop, etc. The reverse order is also used by some programmers. This style is generally agreed to have originated from the early programming of Fortran[ citation needed ], where these variable names beginning with these letters were implicitly declared as having an integer type, and so were obvious choices for loop counters that were only temporarily required. The practice dates back further to mathematical notation where indices for sums and multiplications are often i, j, etc. A variant convention is the use of duplicated letters for the index, ii, jj, and kk, as this allows easier searching and search-replacing than using a single letter. [3]

Example

An example of C code involving nested for loops, where the loop counter variables are i and j:

for(i=0;i<100;i++){for(j=i;j<10;j++){some_function(i,j);}}

Loops in C can also be used to print the reverse of a word. As:

for(i=0;i<6;i++){scanf("%c",&a[i]);}for(i=4;i>=0;i--){printf("%c",a[i]);}

Here, if the input is apple, the output will be elppa.

Additional semantics and constructs

Use as infinite loops

This C-style for-loop is commonly the source of an infinite loop since the fundamental steps of iteration are completely in the control of the programmer. When infinite loops are intended, this type of for-loop can be used (with empty expressions), such as:

for(;;)//loop body

This style is used instead of infinite while (1) loops to avoid a type conversion warning in some C/C++ compilers. [4] Some programmers prefer the more succinct for (;;) form over the semantically equivalent but more verbose while (true) form.

Early exit and continuation

Some languages may also provide other supporting statements, which when present can alter how the for-loop iteration proceeds. Common among these are the break and continue statements found in C and its derivatives. The break statement causes the innermost loop to be terminated immediately when executed. The continue statement will move at once to the next iteration without further progress through the loop body for the current iteration. A for statement also terminates when a break, goto, or return statement within the statement body is executed.[Wells] Other languages may have similar statements or otherwise provide means to alter the for-loop progress; for example in Fortran 95:

DO I=1,Nstatements!Executed for all values of "I", up to a disaster if any.IF(nogood)CYCLE! Skip this value of "I", and continue with the next.Statements!Executed only where goodness prevails.IF(disaster)EXIT! Abandon the loop.Statements!While good and, no disaster.END DO! Should align with the "DO".

Some languages offer further facilities such as naming the various loop statements so that with multiple nested loops there is no doubt as to which loop is involved. Fortran 95, for example:

X1:DO I=1,NstatementsX2:DO J=1,MstatementsIF(trouble)CYCLE X1statementsEND DO X2statementsEND DO X1

Thus, when "trouble" is detected in the inner loop, the CYCLE X1 (not X2) means that the skip will be to the next iteration for I, not J. The compiler will also be checking that each END DO has the appropriate label for its position: this is not just a documentation aid. The programmer must still code the problem correctly, but some possible blunders will be blocked.

Loop variable scope and semantics

Different languages specify different rules for what value the loop variable will hold on termination of its loop, and indeed some hold that it "becomes undefined". This permits a compiler to generate code that leaves any value in the loop variable, or perhaps even leaves it unchanged because the loop value was held in a register and never stored in memory. Actual behavior may even vary according to the compiler's optimization settings, as with the Honeywell Fortran66 compiler.

In some languages (not C or C++) the loop variable is immutable within the scope of the loop body, with any attempt to modify its value being regarded as a semantic error. Such modifications are sometimes a consequence of a programmer error, which can be very difficult to identify once made. However, only overt changes are likely to be detected by the compiler. Situations, where the address of the loop variable is passed as an argument to a subroutine, make it very difficult to check because the routine's behavior is in general unknowable to the compiler. Some examples in the style of Fortran:

DO I=1,NI=7!Overt adjustment of the loop variable. Compiler complaint likely.Z=ADJUST(I)!Function "ADJUST" might alter "I", to uncertain effect.Normalstatements! Memory might fade and "I" is the loop variable.PRINT(A(I),B(I),I=1,N,2)!Implicit for-loop to print odd elements of arrays A and B, reusing "I"...PRINT I! What value will be presented?END DO! How many times will the loop be executed?

A common approach is to calculate the iteration count at the start of a loop (with careful attention to overflow as in for i:= 0: 65535 do ... ; in sixteen-bit integer arithmetic) and with each iteration decrement this count while also adjusting the value of I: double counting results. However, adjustments to the value of I within the loop will not change the number of iterations executed.

Still, another possibility is that the code generated may employ an auxiliary variable as the loop variable, possibly held in a machine register, whose value may or may not be copied to I on each iteration. Again, modifications of I would not affect the control of the loop, but now a disjunction is possible: within the loop, references to the value of I might be to the (possibly altered) current value of I or to the auxiliary variable (held safe from improper modification) and confusing results are guaranteed. For instance, within the loop a reference to element I of an array would likely employ the auxiliary variable (especially if it were held in a machine register), but if I is a parameter to some routine (for instance, a print-statement to reveal its value), it would likely be a reference to the proper variable I instead. It is best to avoid such possibilities.

Adjustment of bounds

Just as the index variable might be modified within a for-loop, so also may its bounds and direction. But to uncertain effect. A compiler may prevent such attempts, they may have no effect, or they might even work properly - though many would declare that to do so would be wrong. Consider a statement such as

for i := first : last : step do   A(i) := A(i) / A(last);

If the approach to compiling such a loop was to be the evaluation of first, last and step and the calculation of an iteration count via something like (last - first)/step once only at the start, then if those items were simple variables and their values were somehow adjusted during the iterations, this would have no effect on the iteration count even if the element selected for division by A(last) changed.

List of value ranges

PL/I and ALGOL 68, allow loops in which the loop variable is iterated over a list of ranges of values instead of a single range. The following PL/I example will execute the loop with six values of i: 1, 7, 12, 13, 14, 15:

doi=1,7,12to15;/*statements*/end;

Equivalence with while-loops

A for-loop is generally equivalent to a while-loop:

factorial := 1  for counter from 2 to 5      factorial := factorial * counter counter:= counter - 1 print counter + "! equals " + factorial

Is equivalent to:

factorial := 1 counter := 1  while counter < 5     counter := counter + 1     factorial := factorial * counter print counter + "! equals " + factorial

As demonstrated by the output of the variables.

Timeline of the for-loop syntax in various programming languages

Given an action that must be repeated, for instance, five times, different languages' for-loops will be written differently. The syntax for a three-expression for-loop is nearly identical in all languages that have it, after accounting for different styles of block termination and so on.

1957: FORTRAN

Fortran's equivalent of the for loop is the DO loop, using the keyword do instead of for, The syntax of Fortran's DO loop is:

DO labelcounter=first,last,stepstatementslabelstatement

The following two examples behave equivalently to the three argument for-loop in other languages, initializing the counter variable to 1, incrementing by 1 each iteration of the loop, and stopping at five (inclusive).

DO 9,COUNTER=1,5,1WRITE(6,8)COUNTER    8FORMAT(I2)    9CONTINUE

In Fortran 77 (or later), this may also be written as:

do counter=1,5write(*,'(i2)')counterend do

The step part may be omitted if the step is one. Example:

* DO loop example.PROGRAM MAINSUM SQ=0DO 199I=1,9999999IF(SUM SQ.GT.1000)GOTO200199  SUM SQ=SUM SQ+I**2200  PRINT 206,SUMSQ206  FORMAT(I2)END

Spaces are irrelevant in fixed-form Fortran statements, thus SUM SQ is the same as SUMSQ. In the modern free-form Fortran style, blanks are significant.

In Fortran 90, the GO TO may be avoided by using an EXIT statement.

* DO loop example.program mainimplicit noneinteger::sumsinteger::isums=0do i=1,9999999if(sums>1000.0)exitsums=sums+i**2end doprint*,sumsend program

1958: ALGOL

ALGOL 58 introduced the for statement, using the form as Superplan:

 FOR Identifier = Base (Difference) Limit

For example to print 0 to 10 incremented by 1:

FOR x = 0 (1) 10 BEGIN PRINT (FL) = x END 

1960: COBOL

COBOL was formalized in late 1959 and has had many elaborations. It uses the PERFORM verb which has many options. Originally all loops had to be out-of-line with the iterated code occupying a separate paragraph. Ignoring the need for declaring and initializing variables, the COBOL equivalent of a for-loop would be.

PERFORMSQ-ROUTINEVARYINGIFROM1 BY1 UNTILI>1000SQ-ROUTINEADDI**2 TOSUM-SQ.

In the 1980s, the addition of in-line loops and structured programming statements such as END-PERFORM resulted in a for-loop with a more familiar structure.

PERFORMVARYINGIFROM1 BY1 UNTILI>1000ADDI**2 TOSUM-SQ.END-PERFORM

If the PERFORM verb has the optional clause TEST AFTER, the resulting loop is slightly different: the loop body is executed at least once, before any test.

1964: BASIC

In BASIC, a loop is sometimes named a for-next loop.

10REM THIS FOR LOOP PRINTS ODD NUMBERS FROM 1 TO 1520FORI=1TO15STEP230PRINTI40NEXTI

The end-loop marker specifies the name of the index variable, which must correspond to the name of the index variable at the start of the for-loop. Some languages (PL/I, Fortran 95, and later) allow a statement label at the start of a for-loop that can be matched by the compiler against the same text on the corresponding end-loop statement. Fortran also allows the EXIT and CYCLE statements to name this text; in a nest of loops, this makes clear which loop is intended. However, in these languages, the labels must be unique, so successive loops involving the same index variable cannot use the same text nor can a label be the same as the name of a variable, such as the index variable for the loop.

1964: PL/I

docounter=1to5by1;/* "by 1" is the default if not specified *//*statements*/;end;

The LEAVE statement may be used to exit the loop. Loops can be labeled, and leave may leave a specific labeled loop in a group of nested loops. Some PL/I dialects include the ITERATE statement to terminate the current loop iteration and begin the next.

1968: ALGOL 68

ALGOL 68 has what was considered the universal loop, the full syntax is:

FOR i FROM 1 BY 2 TO 3 WHILE i≠4 DO ~ OD 

Further, the single iteration range could be replaced by a list of such ranges. There are several unusual aspects of the construct

INT sum sq := 0; FOR i  WHILE   print(("So far:", i, new line)); # Interposed for tracing purposes. #   sum sq ≠ 70↑2                    # This is the test for the WHILE   # DO   sum sq +:= i↑2 OD 

Subsequent extensions to the standard ALGOL 68 allowed the to syntactic element to be replaced with upto and downto to achieve a small optimization. The same compilers also incorporated:

until
for late loop termination.
foreach
for working on arrays in parallel.

1970: Pascal

forCounter:=1to5do(*statement*);

Decrementing (counting backwards) is using downto keyword instead of to, as in:

forCounter:=5downto1do(*statement*);

The numeric range for-loop varies somewhat more.

1972: C, C++

for(initialization;condition;increment/decrement)statement

The statement is often a block statement; an example of this would be:

//Using for-loops to add numbers 1 - 5intsum=0;for(inti=1;i<=5;++i){sum+=i;}

The ISO/IEC 9899:1999 publication (commonly known as C99) also allows initial declarations in for loops. All three sections in the for loop are optional, with an empty condition equivalent to true.

1972: Smalltalk

1to:5do: [ :counter|"statements" ] 

Contrary to other languages, in Smalltalk a for-loop is not a language construct but is defined in the class Number as a method with two parameters, the end value and a closure, using self as start value.

1980: Ada

forCounterin1..5loop-- statementsendloop;

The exit statement may be used to exit the loop. Loops can be labeled, and exit may leave a specifically labeled loop in a group of nested loops:

Counting:ForCounterin1..5loopTriangle:forSecondary_Indexin2..Counterloop-- statementsexitCounting;-- statementsendloopTriangle;endloopCounting;

1980: Maple

Maple has two forms of for-loop, one for iterating over a range of values, and the other for iterating over the contents of a container. The value range form is as follows:

forifromfbybtotwhilewdo# loop bodyod;

All parts except do and od are optional. The forI part, if present, must come first. The remaining parts (fromf, byb, tot, whilew) can appear in any order.

Iterating over a container is done using this form of loop:

foreincwhilewdo# loop bodyod;

The inc clause specifies the container, which may be a list, set, sum, product, unevaluated function, array, or object implementing an iterator.

A for-loop may be terminated by od, end, or end do.

1982: Maxima CAS

In Maxima CAS, one can use also integer values:

forx:0.5step0.1thru0.9do/* "Do something with x" */

1982: PostScript

The for-loop, written as [initial] [increment] [limit] { ... } for initializes an internal variable, and executes the body as long as the internal variable is not more than the limit (or not less, if the increment is negative) and, at the end of each iteration, increments the internal variable. Before each iteration, the value of the internal variable is pushed onto the stack. [5]

116{STATEMENTS}for

There is also a simple repeat loop. The repeat-loop, written as X { ... } repeat, repeats the body exactly X times. [6]

5{STATEMENTS}repeat

1983: Ada 83 and above

procedureMainisSum_Sq:Integer:=0;beginforIin1..9999999loopifSum_Sq<=1000thenSum_Sq:=Sum_Sq+I**2endif;endloop;end;

1984: MATLAB

forn=1:5--statementsend

After the loop, n would be 5 in this example.

As i is used for the Imaginary unit, its use as a loop variable is discouraged.

1987: Perl

for($counter=1;$counter<=5;$counter++){# implicitly or predefined variable# statements;}for(my$counter=1;$counter<=5;$counter++){# variable private to the loop# statements;}for(1..5){# variable implicitly called $_; 1..5 creates a list of these 5 elements# statements;}statementfor1..5;# almost same (only 1 statement) with natural language orderformy$counter(1..5){# variable private to the loop# statements;}

"There's more than one way to do it" is a Perl programming motto.

1988: Mathematica

The construct corresponding to most other languages' for-loop is named Do in Mathematica.

Do[f[x],{x,0,1,0.1}]

Mathematica also has a For construct that mimics the for-loop of C-like languages.

For[x=0,x<=1,x+=0.1,f[x]]

1989: Bash

# first formforiin12345do# must have at least one command in a loopecho$i# just print the value of idone
# second formfor((i=1;i<=5;i++))do# must have at least one command in a loopecho$i# just print the value of idone

An empty loop (i.e., one with no commands between do and done) is a syntax error. If the above loops contained only comments, execution would result in the message "syntax error near unexpected token 'done'".

1990: Haskell

The built-in imperative forM_ maps a monadic expression into a list, as

forM_[1..5]$\indx->dostatements

or get each iteration result as a list in

statements_result_list<-forM[1..5]$\indx->dostatements

But, to save the space of the [1..5] list, a more authentic monadic forLoop_ construction can be defined as

importControl.MonadasMforLoopM_::Monadm=>a->(a->Bool)->(a->a)->(a->m())->m()forLoopM_indxpropincrf=dofindexM.when(propnext)$forLoopM_nextpropincrfwherenext=incurindex

and used as:

forLoopM_(0::Int)(<len)(+1)$\indx->do-- whatever with the index

1991: Oberon-2, Oberon-07, Component Pascal

FORCounter:=1TO5DO(* statement sequence *)END

In the original Oberon language, the for-loop was omitted in favor of the more general Oberon loop construct. The for-loop was reintroduced in Oberon-2.

1991: Python

Python does not contain the classical for loop, rather a foreach loop is used to iterate over the output of the built-in range() function which returns an iterable sequence of integers.

foriinrange(1,6):# gives i values from 1 to 5 inclusive (but not 6)# statementsprint(i)# if we want 6 we must do the followingforiinrange(1,6+1):# gives i values from 1 to 6# statementsprint(i)

Using range(6) would run the loop from 0 to 5.

1993: AppleScript

repeatwithifrom1to5-- statementslogiendrepeat

It can also iterate through a list of items, similar to what can be done with arrays in other languages:

setxto{1,"waffles","bacon",5.1,false}repeatwithiinxlogiendrepeat

A exit repeat may also be used to exit a loop at any time. Unlike other languages, AppleScript currently has no command to continue to the next iteration of a loop.

1993: Crystal

fori=start,stop,intervaldo-- statementsend

So, this code

fori=1,5,2doprint(i)end

will print:

135

For-loops can also loop through a table using

ipairs()

to iterate numerically through arrays and

pairs()

to iterate randomly through dictionaries.

Generic for-loop making use of closures:

forname,phone,andaddressincontacts()do-- contacts() must be an iterator functionend

1995: ColdFusion Markup Language (CFML)

Script syntax

Simple index loop:

for(i=1;i<=5;i++){// statements}

Using an array:

for(iin[1,2,3,4,5]){// statements}

Using a list of string values:

loopindex="i"list="1;2,3;4,5"delimiters=",;"{// statements}

The above list example is only available in the dialect of CFML used by Lucee and Railo.

Tag syntax

Simple index loop:

<cfloopindex="i"from="1"to="5"><!--- statements ---></cfloop>

Using an array:

<cfloopindex="i"array="#[1,2,3,4,5]#"><!--- statements ---></cfloop>

Using a "list" of string values:

<cfloopindex="i"list="1;2,3;4,5"delimiters=",;"><!--- statements ---></cfloop>

1995: Java

for(inti=0;i<5;i++){//perform functions within the loop;//can use the statement 'break;' to exit early;//can use the statement 'continue;' to skip the current iteration}

For the extended for-loop, see Foreach loop § Java.

1995: JavaScript

JavaScript supports C-style "three-expression" loops. The break and continue statements are supported inside loops.

for(vari=0;i<5;i++){// ...}

Alternatively, it is possible to iterate over all keys of an array.

for(varkeyinarray){// also works for assoc. arrays// use array[key]...}

1995: PHP

This prints out a triangle of *

for($i=0;$i<=5;$i++){for($j=0;$j<=$i;$j++){echo"*";}echo"<br />\n";}

1995: Ruby

forthecounterin1..5# statementsend5.timesdo|counter|# counter iterates from 0 to 4# statementsend1.upto(5)do|counter|# statementsend

Ruby has several possible syntaxes, including the above samples.

1996: OCaml

See expression syntax. [7]

(* for_statement:= "for" ident '='  expr  ( "to" ∣  "down to" ) expr "do" expr "done" *)fori=1to5do(* statements *)done;;forj=5downto0do(* statements *)done;;

1998: ActionScript 3

for(varcounter:uint=1;counter<=5;counter++){//statement;}

2008: Small Basic

Fori=1To10' StatementsEndFor

2008: Nim

Nim has a foreach-type loop and various operations for creating iterators. [8]

foriin5..10:# statements

2009: Go

fori:=0;i<=10;i++{// statements}

2010: Rust

foriin0..10{// statements}

2012: Julia

forj=1:10# statementsend

See also

Related Research Articles

In computer science, control flow is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an imperative programming language from a declarative programming language.

<span class="mw-page-title-main">Lua (programming language)</span> Lightweight programming language

Lua is a lightweight, high-level, multi-paradigm programming language designed mainly for embedded use in applications. Lua is cross-platform software, since the interpreter of compiled bytecode is written in ANSI C, and Lua has a relatively simple C application programming interface (API) to embed it into applications.

In computer programming, the scope of a name binding is the part of a program where the name binding is valid; that is, where the name can be used to refer to the entity. In other parts of the program, the name may refer to a different entity, or to nothing at all. Scope helps prevent name collisions by allowing the same name to refer to different objects – as long as the names have separate scopes. The scope of a name binding is also known as the visibility of an entity, particularly in older or more technical literature—this is in relation to the referenced entity, not the referencing name.

In computer science, imperative programming is a programming paradigm of software that uses statements that change a program's state. In much the same way that the imperative mood in natural languages expresses commands, an imperative program consists of commands for the computer to perform. Imperative programming focuses on describing how a program operates step by step, rather than on high-level descriptions of its expected results.

In computer programming, an assignment statement sets and/or re-sets the value stored in the storage location(s) denoted by a variable name; in other words, it copies a value into the variable. In most imperative programming languages, the assignment statement is a fundamental construct.

In computer programming, a block or code block or block of code is a lexical structure of source code which is grouped together. Blocks consist of one or more declarations and statements. A programming language that permits the creation of blocks, including blocks nested within other blocks, is called a block-structured programming language. Blocks are fundamental to structured programming, where control structures are formed from blocks.

<span class="mw-page-title-main">Conditional (computer programming)</span> Control flow statement that executes code according to some condition(s)

In computer science, conditionals are programming language constructs that perform different computations or actions or return different values depending on the value of a Boolean expression, called a condition.

<span class="mw-page-title-main">While loop</span> Control flow statement for repeating execution until a condition is met

In most computer programming languages, a while loop is a control flow statement that allows code to be executed repeatedly based on a given Boolean condition. The while loop can be thought of as a repeating if statement.

In computing, a line number is a method used to specify a particular sequence of characters in a text file. The most common method of assigning numbers to lines is to assign every line a unique number, starting at 1 for the first line, and incrementing by 1 for each successive line.

<span class="mw-page-title-main">Foreach loop</span> Control flow statement for traversing items in a collection

In computer programming, foreach loop is a control flow statement for traversing items in a collection. foreach is usually used in place of a standard for loop statement. Unlike other for loop constructs, however, foreach loops usually maintain no explicit counter: they essentially say "do this to everything in this set", rather than "do this x times". This avoids potential off-by-one errors and makes code simpler to read. In object-oriented languages, an iterator, even if implicit, is often used as the means of traversal.

<span class="mw-page-title-main">ALGOL 68</span> Programming language

ALGOL 68 is an imperative programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously defined syntax and semantics.

In many computer programming languages, a do while loop is a control flow statement that executes a block of code and then either repeats the block or exits the loop depending on a given boolean condition.

In computer programming, a statement is a syntactic unit of an imperative programming language that expresses some action to be carried out. A program written in such a language is formed by a sequence of one or more statements. A statement may have internal components.

Loop unrolling, also known as loop unwinding, is a loop transformation technique that attempts to optimize a program's execution speed at the expense of its binary size, which is an approach known as space–time tradeoff. The transformation can be undertaken manually by the programmer or by an optimizing compiler. On modern processors, loop unrolling is often counterproductive, as the increased code size can cause more cache misses; cf. Duff's device.

In compiler theory, loop interchange is the process of exchanging the order of two iteration variables used by a nested loop. The variable used in the inner loop switches to the outer loop, and vice versa. It is often done to ensure that the elements of a multi-dimensional array are accessed in the order in which they are present in memory, improving locality of reference.

Jensen's device is a computer programming technique that exploits call by name. It was devised by Danish computer scientist Jørn Jensen, who worked with Peter Naur at Regnecentralen. They worked on the GIER ALGOL compiler, one of the earliest correct implementations of ALGOL 60. ALGOL 60 used call by name. During his Turing Award speech, Naur mentions his work with Jensen on GIER ALGOL.

<span class="mw-page-title-main">Recursion (computer science)</span> Use of functions that call themselves

In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller instances of the same problem. Recursion solves such recursive problems by using functions that call themselves from within their own code. The approach can be applied to many types of problems, and recursion is one of the central ideas of computer science.

The power of recursion evidently lies in the possibility of defining an infinite set of objects by a finite statement. In the same manner, an infinite number of computations can be described by a finite recursive program, even if this program contains no explicit repetitions.

This article compares a large number of programming languages by tabulating their data types, their expression, statement, and declaration syntax, and some common operating-system interfaces.

The syntax and semantics of PHP, a programming language, form a set of rules that define how a PHP program can be written and interpreted.

LOOP is a simple register language that precisely captures the primitive recursive functions. The language is derived from the counter-machine model. Like the counter machines the LOOP language comprises a set of one or more unbounded registers, each of which can hold a single non-negative integer. A few arithmetic instructions operate on the registers. The only control flow instruction is 'LOOP x DO...END'. It causes the instructions within its scope to be repeated x times.

References

  1. Wirth, Niklaus (1973). "Preface". Systematic Programming: An Introduction. Prentice-Hall. pp. xiii. ISBN   0138803692.
  2. Thompson, Ken. VCF East 2019 – Brian Kernighan interviews Ken Thompson. YouTube . Archived from the original on 2021-12-12. Retrieved 2020-11-16. I saw Johnson's semicolon version of the for loop and I put that in [B], I stole it.
  3. http://www.knosof.co.uk/vulnerabilities/loopcntrl.pdf Analysis of loop control variables in C
  4. "Compiler Warning (level 4) C4127". Microsoft. Retrieved 29 June 2011.
  5. PostScript Language Reference. Addison-Wesley Publishing Company. 1999. p. 596. ISBN   0-201-37922-8.
  6. "PostScript Tutorial - Loops".
  7. "OCaml expression syntax". Archived from the original on 2013-04-12. Retrieved 2013-03-19.
  8. https://nim-lang.org/docs/system.html#...i%2CT%2CT ".. iterator"