Loops/Infinite: Difference between revisions

no edit summary
(→‎{{header|Io}}: Add INTERCAL)
No edit summary
 
(261 intermediate revisions by more than 100 users not shown)
Line 1:
{{task|Iteration}}
{{task|Iteration}}Specifically print out "SPAM" followed by a newline in an infinite loop.
[[Category:Simple]]
 
;Task:
Print out &nbsp; &nbsp; &nbsp; <big> '''SPAM''' </big> &nbsp; &nbsp; &nbsp; followed by a &nbsp; ''newline'' &nbsp; in an infinite loop.
 
 
;Related tasks:
* &nbsp; [[Loop over multiple arrays simultaneously]]
* &nbsp; [[Loops/Break]]
* &nbsp; [[Loops/Continue]]
* &nbsp; [[Loops/Do-while]]
* &nbsp; [[Loops/Downward for]]
* &nbsp; [[Loops/For]]
* &nbsp; [[Loops/For with a specified step]]
* &nbsp; [[Loops/Foreach]]
* &nbsp; [[Loops/Increment loop index within loop body]]
* &nbsp; [[Loops/Infinite]]
* &nbsp; [[Loops/N plus one half]]
* &nbsp; [[Loops/Nested]]
* &nbsp; [[Loops/While]]
* &nbsp; [[Loops/with multiple ranges]]
* &nbsp; [[Loops/Wrong ranges]]
<br><br>
 
=={{header|11l}}==
<syntaxhighlight lang="11l">L
print(‘SPAM’)</syntaxhighlight>
 
=={{header|360 Assembly}}==
This for sure will result in a severe WTO buffer shortage.
<syntaxhighlight lang="360 assembly">
INFINITE CSECT , this PGM control section
INFINITE AMODE 31 addressing mode 31 bit
INFINITE RMODE ANY loader can load either 24 or 31
BAKR 14,0 stack caller's register contents
LR 12,15 establish base
LA 13,0 no savearea
USING INFINITE,12 base to assembler
LA 10,1 1 in reg 10
LA 11,2 2 in reg 11
LOOP EQU *
CR 10,11 1==2?
BE RETURN Yes, exit.
WTO 'SPAM',ROUTCDE=11 print SPAM to syslog
B LOOP No, check again.
RETURN PR , return to caller
END INFINITE
</syntaxhighlight>
 
=={{header|4DOS Batch}}==
 
<langsyntaxhighlight lang="4dos">@echo off
do forever
echo SPAM
enddo</langsyntaxhighlight>
 
=={{header|6502 Assembly}}==
Specific OS/hardware routines for printing are left unimplemented.
<langsyntaxhighlight lang="6502asm">InfiniteLoop LDX #0
PrintLoop: LDA MSG,x
JSR PrintAccumulator ;routine not implemented
Line 18 ⟶ 66:
BEQ InfiniteLoop
 
MSG .byte "SPAM", $0A</langsyntaxhighlight>
 
=={{header|6800 Assembly}}==
<syntaxhighlight lang="text"> .cr 6800
.tf spam6800.obj,AP1
.lf spam6800
;=====================================================;
; Infinite SPAM loop for the Motorola 6800 ;
; by barrym 2013-04-10 ;
;-----------------------------------------------------;
; Prints the message "SPAM" repeatedly to an ascii ;
; terminal (console) connected to a 1970s vintage ;
; SWTPC 6800 system, which is the target device for ;
; this assembly. ;
; Many thanks to: ;
; swtpc.com for hosting Michael Holley's documents! ;
; sbprojects.com for a very nice assembler! ;
; swtpcemu.com for a very capable emulator! ;
; reg x is the string pointer ;
; reg a holds the ascii char to be output ;
;-----------------------------------------------------;
outeee = $e1d1 ;ROM: console putchar routine
.or $0f00
;-----------------------------------------------------;
main ldx #string ;Point to the string
bra puts ; and print it
outs jsr outeee ;Emit a as ascii
inx ;Advance the string pointer
puts ldaa ,x ;Load a string character
bne outs ;Print it if non-null
bra main ;else restart
;=====================================================;
string .as "SPAM",#13,#10,#0
.en</syntaxhighlight>
 
=={{header|68000 Assembly}}==
Hardware-specific routines for I/O are left unimplemented and just displayed as a subroutine, as this is not the focus of the task.
<syntaxhighlight lang="68000devpac">doSPAM:
LEA Message,A0
JSR PrintString
JMP doSPAM
 
Message:
DC.B "SPAM",13,10,0
EVEN</syntaxhighlight>
 
=={{header|8086 Assembly}}==
{{works with|https://www.dosbox.com DOSBox}}
===Loading Immediates===
<syntaxhighlight lang="asm">Spam:
mov ah,02h
mov dl,'S' ;VASM replaces a character in single quotes with its ascii equivalent
int 21h ;Print Char routine
 
mov dl,'P'
int 21h
 
mov dl, 'A'
int 21h
 
mov dl, 'M'
int 21h
 
mov dl,13 ;Carriage Return
int 21h
 
mov dl,10 ;New Line
int 21h
 
jmp Spam</syntaxhighlight>
 
===Loading From A Data Source===
<syntaxhighlight lang="asm">mov ah, 02h ;prep int 21h for printing to screen
mov ax, seg SpamMessage ;load into ax whatever segment the address of our message is in.
mov ds, ax ;segment registers on the original 8086 must be loaded from a register
 
cld ;clear the direction flag, this makes commands like "lodsb" auto-increment
 
SpamOuter:
mov si, offset SpamMessage ;load the address of SpamMessage into the source index
SpamInner:
lodsb ;mov al,[ds:si] and increment si by 1.
cmp al,0 ;is this the terminator?
jz SpamOuter ;point si to the beginning of the message again
mov dl,al ;the DOS interrupt for printing requires the desired character to be in DL
int 21h ;print the chosen character to the screen
jmp SpamInner
 
SpamMessage db "SPAM",13,10,0</syntaxhighlight>
 
=={{header|8th}}==
One way:
<syntaxhighlight lang="forth">
: inf "SPAM\n" . recurse ;
</syntaxhighlight>
Another way:
<syntaxhighlight lang="forth">
: inf repeat "SPAM\n" . again ;
</syntaxhighlight>
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program infinite64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessage: .asciz "SPAM\n"
/*********************************/
/* code section */
/*********************************/
.text
.global main
main:
loop:
ldr x0,qAdrszMessage
bl affichageMess
b loop
 
qAdrszMessage: .quad szMessage
 
/********************************************************/
/* File Include fonctions */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</syntaxhighlight>
=={{header|ACL2}}==
<langsyntaxhighlight Lisplang="lisp">(defun spam ()
(declare (xargs :mode :program))
(if nil
nil
(prog2$ (cw "SPAM~%")
(spam))))</langsyntaxhighlight>
 
=={{header|Action!}}==
<syntaxhighlight lang="action!">PROC Main()
DO
PrintE("SPAM")
OD
RETURN</syntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Infinite.png Screenshot from Atari 8-bit computer]
<pre>
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
...
</pre>
 
=={{header|ActionScript}}==
<langsyntaxhighlight lang="actionscript">while (true) {
trace("SPAM");
}</langsyntaxhighlight>
 
=={{header|Ada}}==
<langsyntaxhighlight lang="ada">loop
Put_Line("SPAM");
end loop;</langsyntaxhighlight>
 
=={{header|Agena}}==
Tested with Agena 2.9.5 Win32
<syntaxhighlight lang="agena">do
print( "SPAM" )
od</syntaxhighlight>
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">while (1) {
o_text("SPAM\n");
}</langsyntaxhighlight>
 
=={{header|ALGOL 60}}==
{{trans|ALGOL W}}
<br>
'''Based on the 1962 Revised Repport on ALGOL''':
'''begin'''
'''integer''' i;
'''for''' i:=1 '''step''' 0 '''until''' 2 '''do'''
outtext("spam")
'''end'''
{{works with|ALGOL 60|OS/360}}
<syntaxhighlight lang="algol60">'BEGIN' 'COMMENT' Loops/Infinite - Algol60 - 23/06/2018;
'INTEGER' I;
'FOR' I := 1 'STEP' 0 'UNTIL' 2 'DO'
OUTSTRING(1,'('SPAM')')
'END'</syntaxhighlight>
 
=={{header|ALGOL 68}}==
<langsyntaxhighlight lang="algol68">DO
printf($"SPAM"l$)
OD</langsyntaxhighlight>
Or the classic "dynamic halt":
<langsyntaxhighlight lang="algol68">loop x:
printf($"SPAM"l$);
loop x</langsyntaxhighlight>
 
=={{header|ALGOL W}}==
<syntaxhighlight lang="algolw">begin
for i := 1 step 0 until 2 do write( "SPAM" )
end.</syntaxhighlight>
 
=={{header|AmigaE}}==
<langsyntaxhighlight lang="amigae">PROC main()
LOOP
WriteF('SPAM')
ENDLOOP
ENDPROC</langsyntaxhighlight>
 
=={{header|AppleScript}}==
<langsyntaxhighlight lang="applescript">repeat
log "SPAM"
end repeat</langsyntaxhighlight>
 
=={{header|ARM Assembly}}==
<syntaxhighlight lang="arm_assembly">
.global main
 
main:
 
loop:
ldr r0, =message
bl printf
b loop
 
message:
.asciz "SPAM\n"
</syntaxhighlight>
 
=={{header|ArnoldC}}==
<syntaxhighlight lang="arnoldc">IT'S SHOWTIME
STICK AROUND @NO PROBLEMO
TALK TO THE HAND "SPAM"
CHILL
YOU HAVE BEEN TERMINATED</syntaxhighlight>
 
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">while [true] [
print "SPAM"
]</syntaxhighlight>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight lang="autohotkey">Loop
MsgBox SPAM `n</langsyntaxhighlight>
 
=={{header|AWK}}==
<langsyntaxhighlight lang="awk">BEGIN {
while(1) {
print "SPAM"
}
}</langsyntaxhighlight>
 
=={{header|Axe}}==
Warning: running this program will cause you to need to reset your calculator, thereby losing any user data stored in RAM.
 
<syntaxhighlight lang="axe">While 1
Disp "SPAM",i
End</syntaxhighlight>
 
=={{header|BASIC}}==
{{works with|QuickBasic|4.5}}
Old-fashioned syntax:
<langsyntaxhighlight lang="qbasic">while 1
print "SPAM"
wend</langsyntaxhighlight>
 
Standard BASIC:
<langsyntaxhighlight lang="qbasic">do
print "SPAM"
loop</langsyntaxhighlight>
 
Also
<langsyntaxhighlight lang="qbasic">for i = 1 to 10 step 0
print "SPAM"
next i</langsyntaxhighlight>
 
{{works with|Applesoft BASIC}}
{{works with|Commodore BASIC}}
{{works with|Tiny BASIC}}
{{works with|ZX Spectrum Basic}}
With classic (minimal) BASIC, the standard way to make an infinite loop would be:
<pre>
10 PRINT "SPAM"
20 GOTO 10
</pre>
 
The most intuitive method is to use the <code>GOTO</code> statement.
We can also use a loop, rather than a jump:
 
<syntaxhighlight lang="gwbasic">10 print "SPAM"
<pre>
20 goto 10</syntaxhighlight>
10 FOR l = 1 TO 10 STEP 0: REM A zero step makes the loop infinite
 
20 PRINT "SPAM"
Generally, using <code>GOSUB</code> in place of <code>GOTO</code> is incorrect. Some programming bugs come about when a <code>GOSUB</code> causes a potentially infinite loop, however, eventually stack memory will fill up and cause a terminating error as shown in this Commodore BASIC example:
30 NEXT l
 
</pre>
<pre>ready.
new
 
ready.
10 print "spam! ";:gosub 10
run
spam! spam! spam! spam! spam! spam! spam
! spam! spam! spam! spam! spam! spam! sp
am! spam! spam! spam! spam! spam! spam!
spam! spam! spam! spam! spam! spam!
?out of memory error in 10
ready.
&#9608;</pre>
 
The solution is to keep the stack empty, however, this will also clear all variables used and prevent the use of <code>RETURN</code>ing from the "subroutine". This is accomplished with the <code>CLEAR</code> (or <code>CLR</code> in Commodore BASIC) placed at the start of the loop.
 
<syntaxhighlight lang="gwbasic">10 clr:print "Commodore Spam! ";:gosub 10</syntaxhighlight>
<syntaxhighlight lang="gwbasic">10 clear : print "Apple Spam! ";: gosub 10</syntaxhighlight>
 
Rather than a <code>GOTO</code>, instead we can use a <code>FOR... NEXT</code> statement:
 
<syntaxhighlight lang="gwbasic">10 for i = 1 to 10 step 0 : rem A zero step makes the loop infinite
20 print "SPAM";
30 next i</syntaxhighlight>
 
In most cases, we can also call the <code>RUN</code> command from within the program.
 
<syntaxhighlight lang="gwbasic">10 print "Spam! ";
20 run</syntaxhighlight>
 
<code>IF... THEN</code> has an implied <code>GOTO</code> on some BASICs...
 
<syntaxhighlight lang="gwbasic">10 print "SPAM SPAM! ";:if 1 then 10</syntaxhighlight>
 
==={{header|Applesoft BASIC}}===
<syntaxhighlight lang="applesoftbasic">FOR I = 0 TO 1 STEP 0 : PRINT "SPAM" : NEXT</syntaxhighlight>
 
 
==={{header|BASIC256}}===
<syntaxhighlight lang="basic256">while true
print "SPAM"
end while</syntaxhighlight>
 
==={{header|Chipmunk Basic}}===
{{works with|Chipmunk Basic|3.6.4}}
<syntaxhighlight lang="qbasic">10 while 1
20 print "SPAM"
30 wend</syntaxhighlight>
 
==={{header|Commodore BASIC}}===
In addition to the general examples listed above for [[#BASIC|BASIC]], there is a trick to get a Commodore BASIC program to endlessly loop its listing. All of the lines of code are a linked list in RAM. The trick is accomplished by modifying the pointer to the next line, which is recorded at the very start of each tokenized BASIC line. Instead of it pointing to the next line, you can make it point to a previous line, or itself. This will affect execution when any <code>GOTO</code> or <code>GOSUB</code> needs to reference any line number '''after''' the affected line, since the line search will be corrupted (and endless...)
 
For example, on the Commodore 64, BASIC program storage begins at $0800 (2048) with a NULL byte, the first line begins at $0801 with the little-endian pointer to the memory address that begins the next line. After entering the short program, <code>POKE</code> a 1 into the low byte portion of the pointer (location $0801) causing complete pointer value to be $0801... pointing to itself. Then run or list the program for endless looping fun.
 
Other similarly structured BASICs based on the early Microsoft BASIC (where the <code>LIST</code> routine follows the linked list pointers) can be manipulated in the same manner if it is known where BASIC program memory starts.
 
<pre>ready.
10 rem there is way too much spam in this program!
20 print "spam!!";:goto 10
poke 2049,1
 
ready.
run
spam!!spam!!spam!!spam!!spam!!spam!!spam!!spam!!
spam!!spam!!spam!!spam!!spam!!spam!!spam!!spam!!
spam!!spam!!spam!!spam!!spam!!spam!!spam!!spam!!
spam!!spam!!spam!!spam!!spam!!spam!!spam!!spam!!
spam!!spam!!spam!!spam!!spam!!spam!!spam!!spam!!
break in 10
ready.
list
 
10 rem there is way too much spam in this program!
10 rem there is way too much spam in this program!
10 rem there is way too much spam in this program!
10 rem there is way too much spam in this program!
10 rem there is way too much spam in this program!
10 rem there is way too much spam in this program!
break
ready.
&#9608;</pre>
 
==={{header|Craft Basic}}===
<syntaxhighlight lang="text">
do
print "SPAM"
loop
</syntaxhighlight>
 
==={{header|GW-BASIC}}===
{{works with|PC-BASIC}}
<syntaxhighlight lang="qbasic">10 WHILE 1
20 PRINT "SPAM"
30 WEND</syntaxhighlight>
Also
<syntaxhighlight lang="qbasic">10 PRINT "SPAM"
20 GOTO 10</syntaxhighlight>
 
==={{header|IS-BASIC}}===
<syntaxhighlight lang="is-basic">100 DO
110 PRINT "SPAM"
120 LOOP</syntaxhighlight>
 
==={{header|MSX Basic}}===
<syntaxhighlight lang="qbasic">10 FOR I = 1 TO 10 STEP 0
20 PRINT "SPAM"
30 NEXT I</syntaxhighlight>
Also
<syntaxhighlight lang="qbasic">10 PRINT "SPAM"
20 GOTO 10</syntaxhighlight>
 
==={{header|QB64}}===
<syntaxhighlight lang="qb64">'Using Do loop
Do 'Alternatively this could have a conditional, "Do While 1"
Print "SPAM"
Loop
 
'Using While loop
While 1
Print "SPAM"
Wend</syntaxhighlight>
 
==={{header|Quite BASIC}}===
<syntaxhighlight lang="qbasic">10 print "SPAM"
20 goto 10</syntaxhighlight>
 
==={{Header|Tiny BASIC}}===
<syntaxhighlight lang="qbasic"> 10 PRINT "SPAM"
GOTO 10</syntaxhighlight>
 
==={{header|True BASIC}}===
<syntaxhighlight lang="qbasic">DO
PRINT "SPAM"
LOOP
END</syntaxhighlight>
 
==={{header|Yabasic}}===
<syntaxhighlight lang="yabasic">do
print "SPAM"
loop</syntaxhighlight>
 
O también
<syntaxhighlight lang="yabasic">while true
print "SPAM"
wend</syntaxhighlight>
 
=={{header|Batch File}}==
Using <code>goto</code>:
<langsyntaxhighlight lang="dos">@echo off
:loop
echo SPAM
goto loop</langsyntaxhighlight>
Another variant which uses Windows NT's <code>for</code> statement:
 
{{works with|Windows NT|4 or later}}
<langsyntaxhighlight lang="dos">for /l %%x in (1,0,2) do @echo SPAM</langsyntaxhighlight>
This essentially is a counted loop which starts at <code>1</code>, increments by <code>0</code> and stops when the counter reaches <code>2</code>.
 
=={{header|BBC BASIC}}==
<langsyntaxhighlight lang="bbcbasic"> REPEAT
PRINT "SPAM"
UNTIL FALSE</langsyntaxhighlight>
 
=={{header|bc}}==
<langsyntaxhighlight lang="bc">while (1) "SPAM
"</langsyntaxhighlight>
 
=={{header|BCPL}}==
<syntaxhighlight lang="bcpl">get "libhdr"
 
let start() be writes("SPAM*N") repeat</syntaxhighlight>
 
=={{header|beeswax}}==
<syntaxhighlight lang="beeswax">_>`SPA`p
bN`M`<</syntaxhighlight>
 
=={{header|Befunge}}==
Because the 2-D code space is toroidal, all loops are infinite unless explicitly stopped with '''@'''.
unless explicitly stopped with '''@'''.
<lang befunge>55+"MAPS",,,,,</lang>
<syntaxhighlight lang="befunge">55+"MAPS",,,,,</syntaxhighlight>
 
=={{header|Binary Lambda Calculus}}==
Adding "SPAM\n" to the BLC8 cycle program generated from https://github.com/tromp/AIT/blob/master/lists/cycle.lam
gives the 16 byte program
<pre>11 a1 72 34 00 2d e5 e7 ef b3 40 53 50 41 4d 0a</pre>
 
=={{header|blz}}==
<syntaxhighlight lang="blz">while true
print("SPAM")
end</syntaxhighlight>
 
=={{header|bootBASIC}}==
Using <code>goto</code>:
<syntaxhighlight lang="bootbasic">10 print "SPAM"
20 goto 10</syntaxhighlight>
 
Using <code>run</code>:
<syntaxhighlight lang="bootbasic">10 print "SPAM"
20 run</syntaxhighlight>
 
=={{header|BQN}}==
 
The main way of performing an infinite loop in BQN is using recursion.
 
<syntaxhighlight lang="bqn">{𝕊 •Out 𝕩}"SPAM"</syntaxhighlight>
 
will likely end in a stack overflow.
 
=={{header|Bracmat}}==
<syntaxhighlight lang="bracmat">whl'out$SPAM</syntaxhighlight>
 
=={{header|Brainf***}}==
Optimized for code size:
<lang bf>++++++++++[->++++++>++++++++>+<<<]>+++++>
<syntaxhighlight lang="bf">++++++++++[->++++++>++++++++>+<<<]>+++++>
[+++.---.<.>---.+++>.<]</lang>
[+++.---.<.>---.+++>.<]</syntaxhighlight>
 
Optimized for execution speed:
<syntaxhighlight lang="bf">10++++++++++
[-> 8++++++++ > 8++++++++ > 6++++++ > 8++++++++ > 1+ <<<<<]>
83+++ > 80 > 65+++++ > 77--- <<<
[.>.>.>.>.<<<<]</syntaxhighlight>
 
=={{header|Brat}}==
<langsyntaxhighlight lang="brat">loop { p "SPAM" }</langsyntaxhighlight>
 
=={{header|Bruijn}}==
<syntaxhighlight lang="bruijn">
:import std/String .
 
main [spam spam]
spam ["SPAM\n" ++ (0 0)]
</syntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">while(1) puts("SPAM");</langsyntaxhighlight>
or
<langsyntaxhighlight lang="c"> for(;;) puts("SPAM");</langsyntaxhighlight>
or
<langsyntaxhighlight lang="c">do { puts("SPAM"); } while(1);</langsyntaxhighlight>
or
<langsyntaxhighlight lang="c">while(puts("SPAM"));</langsyntaxhighlight>
or
<syntaxhighlight lang="c">
spam: puts("SPAM");
goto spam;
</syntaxhighlight>
 
=={{header|C sharp|C#}}==
 
<syntaxhighlight lang="csharp">while (true)
{
Console.WriteLine("SPAM");
}</syntaxhighlight>
 
=={{header|C++}}==
{{trans|C}}
<langsyntaxhighlight lang="cpp">while (true)
std::cout << "SPAM\n" << std::endl;</langsyntaxhighlight>
or
<langsyntaxhighlight lang="cpp">for (;;)
std::cout << "SPAM\n" << std::endl;</langsyntaxhighlight>
or
<langsyntaxhighlight lang="cpp">do
std::cout << "SPAM\n" << std::endl;
while (true);</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
 
=={{header|C3}}==
<lang csharp>while (true)
<syntaxhighlight lang="c3">while(1) io::printn("SPAM");</syntaxhighlight>
or
<syntaxhighlight lang="c3">for(;;) io::printn("SPAM");</syntaxhighlight>
or
<syntaxhighlight lang="c3">do { io::printn("SPAM"); } while(1);</syntaxhighlight>
or
<syntaxhighlight lang="c3">switch (1)
{
case 1:
Console.WriteLine("SPAM");
io::printn("SPAM");
}</lang>
nextcase 1;
}
</syntaxhighlight>
 
=={{header|Chapel}}==
<syntaxhighlight lang="chapel">while true do writeln("SPAM");</syntaxhighlight>
 
=={{header|ChucK}}==
<syntaxhighlight lang="text">
while(true) <<<"SPAM">>>;
</syntaxhighlight>
 
=={{header|Clojure}}==
<syntaxhighlight lang="lisp">(loop [] (println "SPAM") (recur))</syntaxhighlight>
 
=={{header|COBOL}}==
<syntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. Spam.
 
PROCEDURE DIVISION.
PERFORM UNTIL 1 <> 1
DISPLAY "SPAM"
END-PERFORM
 
GOBACK
.</syntaxhighlight>
[[OpenCOBOL]] supports a <code>FOREVER</code> clause for <code>PERFORM</code> which will have the same effect.
 
=={{header|CoffeeScript}}==
<syntaxhighlight lang="coffeescript">loop
console.log 'SPAM'
</syntaxhighlight>
 
=={{header|ColdFusion}}==
Line 169 ⟶ 685:
 
With tags:
<langsyntaxhighlight lang="cfm"><cfloop condition = "true NEQ false">
SPAM
</cfloop></langsyntaxhighlight>
With script:
<langsyntaxhighlight lang="cfm"><cfscript>
while( true != false )
{
writeOutput( "SPAM" );
}
</cfscript></langsyntaxhighlight>
 
=={{header|ClojureComal}}==
<syntaxhighlight lang="comal">LOOP
<lang lisp>(loop [] (println "SPAM") (recur))</lang>
PRINT "SPAM"
ENDLOOP</syntaxhighlight>
 
=={{header|CoffeeScriptCommon Lisp}}==
<syntaxhighlight lang="lisp">(loop (write-line "SPAM"))</syntaxhighlight>
<lang coffeescript>loop
console.log 'SPAM'
</lang>
 
=== Using DO ===
<syntaxhighlight lang="lisp">
(do () ; Not initialization
(nil) ; Not break condition
(print "SPAM")) ; On every loop as requested
</syntaxhighlight>
 
{{out}}
=={{header|Common Lisp}}==
<pre>
<lang lisp>(loop (write-line "SPAM"))</lang>
"SPAM"
...
</pre>
 
=={{header|Corescript}}==
<syntaxhighlight lang="corescript">
:top
print Spam!
goto top
</syntaxhighlight>
 
=={{header|Cowgol}}==
<syntaxhighlight lang="cowgol">include "cowgol.coh";
 
loop
print("Spam\n");
end loop;</syntaxhighlight>
 
=={{header|Crystal}}==
<syntaxhighlight lang="crystal">loop do
puts "SPAM"
end</syntaxhighlight>
 
Using <code>while</code>/<code>until</code>:
<syntaxhighlight lang="crystal">while true
puts "SPAM"
end</syntaxhighlight>
<syntaxhighlight lang="crystal">until false
puts "SPAM"
end</syntaxhighlight>
 
Using an infinite range:
<syntaxhighlight lang="crystal">(0..).each do
puts "SPAM"
end</syntaxhighlight>
 
=={{header|D}}==
Some common ways to create an infinite printing loop:
<langsyntaxhighlight lang="d">import std.stdio;
 
void main() {
while (true)
writeln("SPAM");
}</langsyntaxhighlight>
 
<langsyntaxhighlight lang="d">import std.stdio;
 
void main() {
Line 207 ⟶ 764:
writeln("SPAM");
while (true);
}</langsyntaxhighlight>
 
<langsyntaxhighlight lang="d">import std.stdio;
 
void main() {
for ( ; ; )
writeln("SPAM");
}</langsyntaxhighlight>
 
<langsyntaxhighlight lang="d">import std.stdio;
 
void main() {
Line 222 ⟶ 779:
writeln("SPAM");
goto LOOP;
}</langsyntaxhighlight>
 
=={{header|Dart}}==
<syntaxhighlight lang="text">
main() {
while(true) {
print("SPAM");
}
}
</syntaxhighlight>
 
=={{header|dc}}==
<langsyntaxhighlight lang="dc">[[SPAM
]P dx]dx</langsyntaxhighlight>
 
This loop is a tail-recursive function. The program pushes the function on the stack, the outer ''dx'' makes the first call, and the inner ''dx'' makes each recursive call.
The program pushes the function on the stack,
=={{header|Déjà Vu}}==
the outer ''dx'' makes the first call,
<lang dejavu>while True:
and the inner ''dx'' makes each recursive call.
print "SPAM"</lang>
 
Infinite recursion thanks to tail calls:
=={{header|DCL}}==
<lang dejavu>labda:
<syntaxhighlight lang="dcl">$ loop:
print "SPAM"
$ write sys$output "SPAM"
recurse
$ goto loop</syntaxhighlight>
call</lang>
 
=={{header|Delphi}}==
''See [[#Pascal|Pascal]]''
 
=={{header|DIBOL-11}}==
<lang Delphi>while True do Writeln('SPAM');</lang>
<syntaxhighlight lang="DIBOL-11">
START ;Infinite Loop
 
RECORD SPAM
, A4, 'SPAM'
 
PROC
XCALL FLAGS (0007000000,1) ;Suppress STOP message
 
OPEN(8,O,'TT:')
LOOP,
WRITES(8,SPAM)
GOTO LOOP
END
</syntaxhighlight>
 
=={{header|Draco}}==
<syntaxhighlight lang="draco">proc nonrec main() void:
while true do
writeln("SPAM")
od
corp</syntaxhighlight>
 
=={{header|DWScript}}==
 
<langsyntaxhighlight Delphilang="delphi">while True do
PrintLn('SPAM');</langsyntaxhighlight>
 
=={{header|Dyalect}}==
 
<syntaxhighlight lang="dyalect">while true {
print("SPAM")
}</syntaxhighlight>
 
=={{header|Déjà Vu}}==
<syntaxhighlight lang="dejavu">while true:
!print "SPAM"</syntaxhighlight>
Infinite recursion thanks to tail calls:
<syntaxhighlight lang="dejavu">labda:
!print "SPAM"
recurse
call</syntaxhighlight>
 
=={{header|E}}==
 
<langsyntaxhighlight lang="e">while (true) {
println("SPAM")
}</langsyntaxhighlight>
 
<langsyntaxhighlight lang="e">def f() {
println("SPAM")
f <- ()
}
f <- ()</langsyntaxhighlight>
 
The difference between these is that in the second, other activities can be interleaved with the loop; in the first, no other processing will occur in this vat.
other activities can be interleaved with the loop;
in the first, no other processing will occur in this vat.
 
=={{header|EasyLang}}==
<syntaxhighlight lang="easylang">
while 1 = 1
print "SPAM"
.
</syntaxhighlight>
 
=={{header|EDSAC order code}}==
The EDSAC instruction set does not include an unconditional jump: it is necessary to synthesize it by using either an <code>E</code> "branch on accumulator sign bit clear" or <code>F</code> "branch on accumulator sign bit set" order, in circumstances where the condition is guaranteed to be met. For this specific task, guaranteeing it is trivial: printing characters does not change the contents of the accumulator at all. The solution presented here, however, is more general. We use a <code>T</code> "transfer and clear" order to store the accumulator's contents in storage address <i>θ</i>+17, then jump back to the beginning of the loop and reload the accumulator with an <code>A</code> "add" order. Note that the storage address used as a temporary variable should be set to zero on entry to the loop.
<syntaxhighlight lang="edsac">[ Infinite loop
=============
 
A program for the EDSAC
 
Works with Initial Orders 2 ]
 
T56K
GK
 
O10@ [ letter shift ]
 
[ 1 ] A17@ [ a += C(17@) ]
O11@
O12@
O13@
O14@
O15@
O16@
T17@ [ C(17@) = a; a = 0 ]
E1@ [ if a >= 0 goto 1@ ]
 
[ 10 ] *F
[ 11 ] SF
[ 12 ] PF
[ 13 ] AF
[ 14 ] MF
[ 15 ] @F [ carriage return ]
[ 16 ] &F [ line feed ]
 
[ 17 ] PF
 
EZPF</syntaxhighlight>
 
=={{header|Ela}}==
Line 265 ⟶ 914:
===Direct Approach===
 
<langsyntaxhighlight lang="ela">open consolemonad io
 
loop () = writen "SPAM" $ loop!</lang>do
putStrLn "SPAM"
loop ()
 
loop () ::: IO</syntaxhighlight>
 
===Non-strict version===
 
<langsyntaxhighlight lang="ela">open consolemonad listio
 
loop ()xs = writen "SPAM" :: (& loop!)xs
 
takeit 0 _ = do return ()
take 10 <| loop! //prints SPAM only first 10 times</lang>
takeit num (x::xs) = do
putStrLn x
takeit (num - 1) xs
 
_ = takeit 10 xs ::: IO</syntaxhighlight>
 
=={{header|Elena}}==
ELENA 6.x:
<syntaxhighlight lang="elena">public program()
{
while (true)
{
console.writeLine("spam")
}
}</syntaxhighlight>
 
=={{header|Elixir}}==
<syntaxhighlight lang="elixir">defmodule Loops do
def infinite do
IO.puts "SPAM"
infinite
end
end
 
Loops.infinite</syntaxhighlight>
or
<syntaxhighlight lang="elixir">Stream.cycle(["SPAM"]) |> Enum.each(&IO.puts &1)</syntaxhighlight>
 
=={{header|Emacs Lisp}}==
 
<syntaxhighlight lang="lisp">(while t
(message "SPAM"))</syntaxhighlight>
 
=={{header|EMal}}==
<syntaxhighlight lang="emal">
for ever
writeLine("SPAM")
end
</syntaxhighlight>
 
=={{header|Erlang}}==
<syntaxhighlight lang ="erlang">-module (main).
-exportmodule ([main/1]).
-export ([main/0]).
 
main(Any) ->
io:fwrite( "SPAM~n",[] ),
main(Any)</lang>.
</syntaxhighlight>
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
LOOP
PRINT("SPAM")
END LOOP
</syntaxhighlight>
You can use also WHILE TRUE..END WHILE or REPEAT...UNTIL FALSE loops.
 
=={{header|Euphoria}}==
<syntaxhighlight lang="euphoria">
<lang Euphoria>
while 1 do
puts(1, "SPAM\n")
end while
</syntaxhighlight>
</lang>
 
=={{header|F Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">
// Imperative Solution
while true do
Line 302 ⟶ 1,004:
printfn "SPAM"
forever ()
</syntaxhighlight>
</lang>
 
=={{header|Factor}}==
Tail recursion:
<lang factor>: spam ( -- ) "SPAM" print spam ;</lang>
<langsyntaxhighlight lang="factor">: spam ( -- ) [ "SPAM" print t ] loopspam ;</langsyntaxhighlight>
Looping combinators:
<syntaxhighlight lang="factor">[ "SPAM" print t ] loop</syntaxhighlight>
<syntaxhighlight lang="factor">USE: combinators.extras
[ "SPAM" print ] forever</syntaxhighlight>
 
=={{header|FALSE}}==
<langsyntaxhighlight lang="false">[1]["SPAM
"]#</langsyntaxhighlight>
 
=={{header|Fantom}}==
 
<langsyntaxhighlight lang="fantom">
class Main
{
Line 325 ⟶ 1,031:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Fermat}}==
<syntaxhighlight lang="fermat">while 1 do !!'SPAM'; od</syntaxhighlight>
 
=={{header|Fish}}==
<syntaxhighlight lang="fish">a"MAPS"ooooo</syntaxhighlight>
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: email begin ." SPAM" cr again ;</langsyntaxhighlight>
 
=={{header|Fortran}}==
FORTRAN 77
{{Works with|Fortran|77 and later}}
<syntaxhighlight lang ="fortran"> PROGRAM INFINITELOOP
10 WRITE(*,*) 'SPAM'
C While you can put this label on the WRITE statement, it is good
GO TO 10
C form to label CONTINUE statements whenever possible, rather than
END
C statements that actually contain instructions. This way, you can
</syntaxhighlight>
C indent inside the "loop" and make it more readable.
10 CONTINUE
WRITE (*,*) 'SPAM'
GOTO 10
 
Fortran 90
C It is also good form to close the "loop" with another label. In
<syntaxhighlight lang="fortran">
C this case, there is absolutely no reason to do this at all, but,
program spam
C if you wanted to break, you would be able to add `GOTO 20` to
implicit none
C exit the loop.
do
20 CONTINUE
write(*,*) 'SPAM'
end do
end program spam
</syntaxhighlight>
 
=={{header|Fortress}}==
STOP
<syntaxhighlight lang="fortress">
END</lang>
component loops_infinite
export Executable
run() = while true do
println("SPAM")
end
end
</syntaxhighlight>
 
=={{header|FreeBASIC}}==
{{Works with|Fortran|90 and later}}
<syntaxhighlight lang="freebasic">' FB 1.05.0
<lang fortran>DO
 
WRITE(*,*) "SPAM"
Do
END DO</lang>
Print "SPAM"
Although deprecated GOTO is still available
Loop</syntaxhighlight>
<lang fortran>10 WRITE(*,*) "SPAM"
 
GOTO 10</lang>
=={{header|Frink}}==
<syntaxhighlight lang="frink">
while true
println["SPAM"]
</syntaxhighlight>
 
=={{header|FutureBasic}}==
Loop de loop -- whose great idea was this?
<syntaxhighlight lang="futurebasic">include "NSLog.incl"
 
dispatchglobal
while 1
NSLog(@"SPAM")
wend
dispatchend
 
HandleEvents</syntaxhighlight>
 
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=e63dcdc939f8a7dcfd3194d884f8d4a5 Click this link to run this code]'''
<syntaxhighlight lang="gambas">Public Sub Main()
 
Do
Print "SPAM"
Loop
 
End</syntaxhighlight>
 
=={{header|GAP}}==
<syntaxhighlight lang="gap">while true do
Print("SPAM\n");
od;</syntaxhighlight>
 
=={{header|GB BASIC}}==
<syntaxhighlight lang="gb basic">10 print "SPAM"
20 goto10</syntaxhighlight>
 
=={{header|GDScript}}==
{{works with|Godot|4.0.1}}
 
<syntaxhighlight lang="gdscript">
extends MainLoop
 
 
func _process(_delta: float) -> bool:
print("SPAM")
return false # _process loops until true is returned
 
</syntaxhighlight>
 
=={{header|GlovePIE}}==
GlovePIE does not natively support multiple lines of output. As such, this code continuously changes the single line of output to SPAM. The below code does this without specifying an infinite loop because all GlovePIE scripts loop indefinitely until the program is stopped.
<syntaxhighlight lang="glovepie">debug = "SPAM"</syntaxhighlight>
 
=={{header|GML}}==
<langsyntaxhighlight GMLlang="gml">while(1)
show_message("SPAM")</langsyntaxhighlight>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import "fmt"
 
func main() {
for {
fmt.Printf("SPAM\n")
}
}</langsyntaxhighlight>
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">while (true) {
println 'SPAM'
}</langsyntaxhighlight>
 
=={{header|Halon}}==
<syntaxhighlight lang="halon">forever {
echo "SPAM";
}</syntaxhighlight>
or (due to optimizations, these are equally fast)
<syntaxhighlight lang="halon">while (true) {
echo "SPAM";
}</syntaxhighlight>
 
=={{header|Hare}}==
<syntaxhighlight lang="hare">use fmt;
 
export fn main() void = {
for (true) {
fmt::println("SPAM")!;
};
};</syntaxhighlight>
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">forever (putStrLn "SPAM")</langsyntaxhighlight>
or
<langsyntaxhighlight lang="haskell">import Control.Monad.Fix (fix)
fix (putStrLn "SPAM" >>) </langsyntaxhighlight>
 
=={{header|Haxe}}==
<syntaxhighlight lang="haxe">while (true)
Sys.println("SPAM");</syntaxhighlight>
 
=={{header|hexiscript}}==
<syntaxhighlight lang="hexiscript">while true; println "SPAM"; endwhile</syntaxhighlight>
 
=={{header|HicEst}}==
<langsyntaxhighlight lang="hicest">DO i = 1, 1E20 ! for i with 16 or more digits: i == i + 1 == loop infinite
WRITE() "SPAM"
ENDDO</langsyntaxhighlight>
 
=={{header|HolyC}}==
<syntaxhighlight lang="holyc">while(1) Print("SPAM\n");</syntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
There are several ways to write infinite loops in Icon. The most straightforward would be with repeat.
<langsyntaxhighlight lang="icon">procedure main()
repeat write("SPAM")
end</langsyntaxhighlight>
 
Alternately one could use one of these:
<langsyntaxhighlight lang="icon">until &fail do write("SPAM") # always fails, needs succeed to break
...
while write("SPAM") # always succeeds, needs failure to break
Line 402 ⟶ 1,205:
while write(|"SPAM") # this is a common mistake that results in an endless loop
...
while write(1 to 5) # a clearer version of the same mistake that generates endless 1's</langsyntaxhighlight>
 
=={{header|IDL}}==
<syntaxhighlight lang IDL="idl">while 1 do print,'SPAM'</langsyntaxhighlight>
 
=={{header|INTERCALIntercal}}==
Assuming Turing Text I/O with 8-bit ASCII-compatible character set, using COME FROM:
 
<langsyntaxhighlight lang="intercal"> NOTE THIS IS INTERCAL
PLEASE ,1 <- #5
DO ,1 SUB #1 <- #54
Line 417 ⟶ 1,220:
PLEASE ,1 SUB #4 <- #208
DO ,1 SUB #5 <- #98
PLEASEDO COME FROM (1001)
DO READ OUT ,1
(2002) DO ,1 SUB #1 <- #134
(1) PLEASE ABSTAIN FROM (2002)</syntaxhighlight>
 
(100) DO READ OUT ,1</lang>
=={{header|Io}}==
<langsyntaxhighlight lang="io">loop("SPAM" println)</langsyntaxhighlight>
 
=={{header|J}}==
 
<syntaxhighlight lang ="j">(-[smoutput bind ]F.(echo@'SPAM')^:_(1)0</langsyntaxhighlight>
 
Alternatively,
 
<langsyntaxhighlight lang="j">smoutput bind 'SPAM'^:1e99 ''</langsyntaxhighlight>
 
This second implementation relies on numeric inaccuracies in IEEE floating point notation. For example, 1+1e98 is exactly equal to 1e98. That said, 1e98 iterations would still be significantly longer than the practical life of any machine anyone would care to dedicate to this task.
For example, 1+1e98 is exactly equal to 1e98.
That said, 1e98 iterations would still be significantly longer than the practical life of any machine anyone would care to dedicate to this task.
 
=={{header|Java}}==
<syntaxhighlight lang="java">
<lang java>while(true){
while (true) System.out.printlnprint("SPAM\n");
</syntaxhighlight>
}</lang>
 
<syntaxhighlight lang="java">
<lang java>for(;;){
for (;;) System.out.printlnprint("SPAM\n");
</syntaxhighlight>
}</lang>
 
=={{header|JavaScript}}==
<langsyntaxhighlight lang="javascript">for (;;) printconsole.log("SPAM");</langsyntaxhighlight>
<langsyntaxhighlight lang="javascript">while (true) printconsole.log("SPAM");</langsyntaxhighlight>
 
=={{header|Joy}}==
<langsyntaxhighlight lang="joy">DEFINE loop == [true []] dip while.
["SPAM\n" putchars] loop.</syntaxhighlight>
 
=={{header|jq}}==
["SPAM\n" putchars] loop.</lang>
<syntaxhighlight lang="jq">recurse("SPAM")</syntaxhighlight>
{{Out}}
"SPAM"
"SPAM"
...
 
To suppress the quotation marks, invoke jq with the -r option.
 
=={{header|Jsish}}==
<syntaxhighlight lang="javascript">for (;;) puts('SPAM');</syntaxhighlight>
 
=={{header|Julia}}==
<syntaxhighlight lang="julia">
while true
println("SPAM")
end
</syntaxhighlight>
{{out}}
<pre>
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
SPAM
</pre>
and so on until ^C
 
=={{header|K}}==
<langsyntaxhighlight Klang="k"> while[1; `0:"SPAM\n"]</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<syntaxhighlight lang="scala">// version 1.0.6
 
fun main(args: Array<String>) {
while (true) println("SPAM")
}</syntaxhighlight>
 
=={{header|LabVIEW}}==
{{VI solution|LabVIEW_Loops_Infinite.png}}
 
=={{header|Lambdatalk}}==
<syntaxhighlight lang="scheme">
{def loops_infinite
{lambda {}
{if true then SPAM{br} {loops_infinite} else never}}}
-> loops_infinite
 
{loops_infinite}
-> SPAM forever...
</syntaxhighlight>
 
=={{header|Lang}}==
<syntaxhighlight lang="lang">
loop {
fn.println(SPAM)
}
</syntaxhighlight>
 
=={{header|Lang5}}==
<syntaxhighlight lang="lang5">do "SPAM\n" . loop</syntaxhighlight>
 
=={{header|Lasso}}==
<syntaxhighlight lang="lasso">// not wise to run this!
while(1 > 0) => {^
'SPAM\r'
^}</syntaxhighlight>
 
=={{header|LDPL}}==
<syntaxhighlight lang="ldpl">procedure:
label spam
display "SPAM" lf
goto spam
</syntaxhighlight>
 
=={{header|Liberty BASIC}}==
<CTRL><Break> is used to terminate such loops.
<syntaxhighlight lang="lb">
<lang lb>
while 1
print "SPAM"
wend
end
</syntaxhighlight>
</lang>
 
=={{header|Lily}}==
<syntaxhighlight lang="lily">
while 1: print("SPAM")
</syntaxhighlight>
 
=={{header|Lingo}}==
<syntaxhighlight lang="lingo">repeat while TRUE
put "SPAM"
end repeat</syntaxhighlight>
 
=={{header|Lisaac}}==
<pre lang=Lisaac>
{ "SPAM\n".print; }.endless_loop;
</pre>
 
=={{header|LiveCode}}==
<syntaxhighlight lang="livecode">repeat forever
put "SPAM" & return
end repeat</syntaxhighlight>
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">forever [print "SPAM]</langsyntaxhighlight>
 
=={{header|LOLCODE}}==
<syntaxhighlight lang="lolcode">HAI
CAN HAS STDIO?
IM IN YR LOOP
VISIBLE "SPAM"
IM OUTTA YR LOOP
KTHXBYE</syntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">
while true do
print("SPAM")
Line 483 ⟶ 1,384:
print("SPAM")
until false
</syntaxhighlight>
</lang>
 
=={{header|M2000 Interpreter}}==
All loops can stop using Esc or Ctrl+C or Break (the last two open dialog box to stop or continue). Using Escape Off we make Esc not work for breaking execution.
If Esc works then Ctrl + Y (and other letters except C, A, Z, X, N, M. F, L), open Control form, which we can do: Next Step, Slow Flow, Stop, and we can show code,current stack, variables, or execute immediate statements. This works only in console, not in M2000 forms.
 
<syntaxhighlight lang="m2000 interpreter">
Module CheckIt {
Print "SPAM"
loop
}
Checkit
</syntaxhighlight>
Using a Repeat (or Do) - Always block
<syntaxhighlight lang="m2000 interpreter">
Module CheckIt {
Repeat {
Print "SPAM"
} Always
}
Checkit
</syntaxhighlight>
 
Printing text rendering using Report.
<syntaxhighlight lang="m2000 interpreter">
Module CheckIt {
\\ stop in every 2/3 of cosole lines
\\ press spacebar or mouse button to continue
Report Format$("Spam\n")
Loop
}
Checkit
\\ using multiline string, replace report from module above
Report {SPAM
}
</syntaxhighlight>
 
=={{header|M4}}==
<langsyntaxhighlight M4lang="m4">define(`spam',`SPAM
spam')
spam</langsyntaxhighlight>
 
=={{header|MACRO11}}==
<syntaxhighlight lang="MACRO11">
; Infinte Loop under RT11
.MCALL .PRINT
.EVEN
BEGIN:
LOOP:
.PRINT #SPAM
BR LOOP
SPAM: .ASCIZ /SPAM/
.END BEGIN
</syntaxhighlight>
 
 
=={{header|MAD}}==
<syntaxhighlight lang="mad"> VECTOR VALUES SPAM = $4HSPAM*$
LOOP PRINT FORMAT SPAM
TRANSFER TO LOOP
END OF PROGRAM</syntaxhighlight>
 
=={{header|Make}}==
<langsyntaxhighlight lang="make">spam:
@echo SPAM
$(MAKE)</langsyntaxhighlight>
 
=={{header|Malbolge}}==
<syntaxhighlight lang="malbolge">
bP&A@?>=<;:9876543210/.-,+*)('&%$T"!~}|;]yxwvutslUSRQ.yx+i)J9edFb4`_^]\yxwRQ)(TSRQ]m!G0KJIyxFvDa%_@?"=<5:98765.-2+*/.-,+*)('&%$#"!~}|utyrqvutsrqjonmPkjihgfedc\DDYAA\>>Y;;V886L5322G//D,,G))>&&A##!7~5:{y7xvuu,10/.-,+*)('&%$#"yb}|{zyxwvutmVqSohmOOjihafeHcEa`YAA\[ZYRW:U7SLKP3NMLK-I,GFED&%%@?>=6;|9y70/4u210/o-n+k)"!gg$#"!x}`{zyxZvYtsrqSoRmlkjLhKfedcEaD_^]\>Z=XWVU7S6QPON0LKDI,GFEDCBA#?"=};438y6543s1r/o-&%*k('&%e#d!~}|^z]xwvuWsVqponPlOjihgIeHcba`B^A\[ZY;W:UTSR4PI2MLKJ,,AFE(&B;:?"~<}{zz165v3s+*/pn,mk)jh&ge#db~a_{^\xwvoXsrqpRnmfkjMKg`_GG\aDB^A?[><X;9U86R53ONM0KJC,+FEDC&A@?!!6||3876w4-tr*/.-&+*)('&%$e"!~}|utyxwvutWlkponmlOjchg`edGba`_XW\?ZYRQVOT7RQPINML/JIHAFEDC&A@?>!<;{98yw5.-ss*/pn,+lj(!~ff{"ca}`^z][wZXtWUqTRnQOkNLhgfIdcFaZ_^A\[Z<XW:U8SRQPOHML/JIHG*ED=%%:?>=~;:{876w43210/(-,+*)('h%$d"ca}|_z\rqYYnsVTpoRPledLLafIGcbE`BXW??TY<:V97S64P31M0.J-+G*(DCB%@?"=<;|98765.3210p.-n+$)i'h%${"!~}|{zyxwvuXVlkpSQmlOjLbafIGcbE`BXW??TY<:V97S64P31M0.J-+G*(D'%A@?"=<}:98y6543,1r/.o,+*)j'&%eez!~a|^tsx[YutWUqjinQOkjMhJ`_dGEaDB^A?[><X;9U86R53O20LKJ-HG*ED'BA@?>7~;:{y7x5.3210q.-n+*)jh&%$#"c~}`{z]rwvutWrkpohmPkjihafI^cba`_^A\[>YXW:UTS5QP3NM0KJ-HGF?D'BA:?>=~;:z8765v32s0/.-nl$#(ig%fd"ca}|_]yrqvYWsVTpSQmPNjMKgJHdGEa`_B]\?ZY<WVUTMR5PO20LK.IHA))>CB%#?87}}49zx6wu3tr0qo-nl*ki'hf$ec!~}`{^yxwvotsrUponQlkMihKIe^]EEZ_B@\?=Y<:V97S64P31M0.J-+GFE(C&A@?8=<;:{876w43s10qo-&%kk"'hf$ec!b`|_]y\ZvYWsVTpSQmlkNiLgf_dcba`C^]\?ZY;WV97SLK33HM0.J-+G*(D'%A$">!};|z8yw543t1r/(-,+*)(i&%fd"!~}|_t]xwvutslqTonmPkjLhKIeHFbEC_^A?[TSX;9UT7R4JIN1/K.,H+)E(&B%#?"~<}{987x/4ussr).o,+l)(h&ge#db~a_{^\x[YutWrTjinQOkNLhgJeG]\aDB^]@[=SRW:877LQP3N0FEJ-+**?DC&A#98=~|:98yx/4u21rp(',mk)(ig%|{"ca}`^z][wZXtWUqTRnQOkNLhKIedcFE`YB@@?ZYRW:UTS6QPO11F..CHGF)(CB;@#>!~;XzV7gwu-QrrqMoJIkZF'WC$#AbQ`_{^L9wI64"VDConzl+j);JJ%qGFEZ~}]{ygwRuc8aSq44"H1Y.iV,e*RQ
</syntaxhighlight>
 
=={{header|Maple}}==
<syntaxhighlight lang="maple">
<lang Maple>
> do print(SPAM) end;
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight lang="mathematica">While[True,
Print@"SPAM";
]</langsyntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}}==
<syntaxhighlight lang="matlab">while true
 
<lang Matlab> while (1), printffprintf('SPAM\n'); end; </lang>
end</syntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">do(disp("SPAM"));</langsyntaxhighlight>
 
=={{header|MAXScript}}==
<langsyntaxhighlight lang="maxscript">while true do print "SPAM\n"</langsyntaxhighlight>
 
=={{header|MelonBasic}}==
Using <code>Goto:1</code>:
<syntaxhighlight lang="melonbasic">Say:"SPAM"
Goto:1</syntaxhighlight>
 
Using <code>Goto:start</code>:
<syntaxhighlight lang="melonbasic">Say:"SPAM"
Goto:start</syntaxhighlight>
 
=={{header|Metafont}}==
 
<langsyntaxhighlight lang="metafont">forever: message "SPAM"; endfor end</langsyntaxhighlight>
 
=={{header|Microsoft Small Basic}}==
With <code>While</code>.
<syntaxhighlight lang="microsoftsmallbasic">
While "True"
TextWindow.WriteLine("SPAM")
EndWhile
</syntaxhighlight>
With <code>Goto</code>.
<syntaxhighlight lang="microsoftsmallbasic">
loopStart:
TextWindow.WriteLine("SPAM")
Goto loopStart
</syntaxhighlight>
 
=={{header|min}}==
{{works with|min|0.19.3}}
<syntaxhighlight lang="min">(true) ("SPAM" puts!) while</syntaxhighlight>
 
=={{header|MIPS Assembly}}==
Thanks to [https://www.chibialiens.com/mips/ Chibialiens.com] for the header/footer, bitmap font, and print routines.
<syntaxhighlight lang="mips">.include "\SrcAll\Header.asm"
.include "\SrcAll\BasicMacros.asm"
.include "\SrcPSX\MemoryMap.asm"
.include "\SrcN64\MemoryMap.asm"
CursorX equ 0x100
CursorY equ 0x101
main:
la a0,MyString
jal PrintString
nop
jal NewLine
nop
j main
nop
MyString:
.byte "SPAM",255,0,0,0 ;the 3 zeroes are padding to ensure proper alignment.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MyFont:
.ifdef buildn64
.incbin "\ResN64\ChibiAkumas.fnt"
.endif
.ifdef buildPSX
.incbin "\ResPSX\ChibiAkumas.fnt"
.endif
 
.include "\SrcALL\graphics.asm"
.include "..\\SrcAll\monitor.asm"
.include "\SrcN64\Footer.asm"</syntaxhighlight>
{{out}}
[https://ibb.co/rpH9bVR Screenshot of Nintendo 64 emulator]
 
=={{header|МК-61/52}}==
<syntaxhighlight lang="text">1 2 3 4 С/П БП 00</syntaxhighlight>
 
''Note'': because this device has no text output instead of "SPAM" was used the number (1234).
 
=={{header|Modula-2}}==
<langsyntaxhighlight lang="modula2">LOOP
InOut.WriteString ("SPAM");
InOut.WriteLn
END;</langsyntaxhighlight>
 
=={{header|Modula-3}}==
<langsyntaxhighlight lang="modula3">LOOP
IO.Put("SPAM\n");
END;</langsyntaxhighlight>
 
=={{header|Monte}}==
 
<syntaxhighlight lang="monte">
while (true):
traceln("SPAM")
</syntaxhighlight>
 
=={{header|MontiLang}}==
<syntaxhighlight lang="montilang">WHILE TRUE
|SPAM| PRINT .
ENDWHILE</syntaxhighlight>
Note that <code>TRUE</code> is simply a variable equal to 1. <code>WHILE 1</code>, any number larger than 0 or any string with a length more than 0 would also work
 
=={{header|MOO}}==
<langsyntaxhighlight lang="moo">while (1)
player:tell("SPAM");
endwhile</langsyntaxhighlight>
 
=={{header|MUMPS}}==
<syntaxhighlight lang="mumps">
<lang MUMPS>
FOR WRITE "SPAM",!
</syntaxhighlight>
</lang>
 
=={{header|Nanoquery}}==
<syntaxhighlight lang="nanoquery">while true
println "SPAM"
end</syntaxhighlight>
 
=={{header|Nemerle}}==
<langsyntaxhighlight Nemerlelang="nemerle">while (true) WriteLine("SPAM");</langsyntaxhighlight>
Or, using recursion:
<langsyntaxhighlight Nemerlelang="nemerle">def loop() : void
{
WriteLine("SPAM");
loop();
}</langsyntaxhighlight>
 
=={{header|NetRexx}}==
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref savelog symbols nobinary
 
Line 557 ⟶ 1,609:
say 'SPAM'
end spam
</syntaxhighlight>
</lang>
 
=={{header|NewLISP}}==
<syntaxhighlight lang="newlisp">(while (println "SPAM"))</syntaxhighlight>
 
=={{header|Nim}}==
<syntaxhighlight lang="nim">while true:
echo "SPAM"</syntaxhighlight>
 
=={{header|NS-HUBASIC}}==
Using <code>FOR</code>:
<syntaxhighlight lang="ns-hubasic">10 FOR I=0 TO 1 STEP 0
20 PRINT "SPAM"
30 NEXT</syntaxhighlight>
 
Using <code>GOTO</code>:
<syntaxhighlight lang="ns-hubasic">10 PRINT "SPAM"
20 GOTO 10</syntaxhighlight>
 
Using <code>RUN</code>:
<syntaxhighlight lang="ns-hubasic">10 PRINT "SPAM"
20 RUN</syntaxhighlight>
 
=={{header|Nu}}==
<syntaxhighlight lang="nu">
while true {print SPAM}
</syntaxhighlight>
 
=={{header|Oberon-2}}==
<syntaxhighlight lang="oberon2">
MODULE InfiniteLoop;
IMPORT
Out;
BEGIN
LOOP
Out.String("SPAM");Out.Ln
END
END InfiniteLoop.
</syntaxhighlight>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
while(true) {
"SPAM"->PrintLine();
};
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">while true do
print_endline "SPAM"
done</langsyntaxhighlight>
 
or
 
<langsyntaxhighlight lang="ocaml">let rec inf_loop() =
print_endline "SPAM";
inf_loop()
in
inf_loop()</langsyntaxhighlight>
 
Seen like this it looks like the "too much functional" danger when a "while" loop looks far simpler, but the functional loop may be useful to provide data to the next loop without using mutable variable.
 
=={{header|Occam}}==
<syntaxhighlight lang="occam">#USE "course.lib"
PROC main (CHAN BYTE screen!)
WHILE TRUE
out.string("SPAM*c*n", 0, screen)
:</syntaxhighlight>
 
=={{header|Octave}}==
<langsyntaxhighlight lang="octave">while(1)
disp("SPAM")
endwhile</langsyntaxhighlight>
 
=={{header|Oforth}}==
 
<syntaxhighlight lang="oforth">begin "SPAM" . again</syntaxhighlight>
 
=={{header|Ol}}==
<syntaxhighlight lang="scheme">
(let loop ()
(display "SPAM")
(loop))
</syntaxhighlight>
 
=={{header|OPL}}==
<syntaxhighlight lang="opl">PROC main:
LOCAL loop%
loop%=1
while loop%=1
PRINT "SPAM"
ENDWH
ENDP</syntaxhighlight>
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">for do
{Show 'SPAM'}
end</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">while(1,
print("SPAM")
);</langsyntaxhighlight>
 
For a shorter version, note that <code>print</code> returns <code>gnil</code> which is evaluated as <code>false</code>. A 'cheating' solution might use <code>print(SPAM)</code> on the hope that the variable SPAM is uninitialized and hence prints as the monomial in itself. But with the <code>'</code> operator that evaluation can be forced, regardless of the current value (if any) of that variable:
A 'cheating' solution might use <code>print(SPAM)</code> on the hope that the variable SPAM is uninitialized and hence prints as the monomial in itself.
<lang parigp>until(print('SPAM),)</lang>
But with the <code>'</code> operator that evaluation can be forced, regardless of the current value (if any) of that variable:
<syntaxhighlight lang="parigp">until(print('SPAM),)</syntaxhighlight>
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">while true do
writeln('SPAM');</langsyntaxhighlight>
Alternatively:
<langsyntaxhighlight lang="pascal">repeat
writeln('SPAM')
until false;</langsyntaxhighlight>
 
=={{header|Perl}}==
<syntaxhighlight lang ="perl">print "SPAM\n" while (1;</lang>){
print "SPAM\n";
}</syntaxhighlight>
 
or equivalently
=={{header|Perl 6}}==
{{works with|Rakudo Star|2010.08}}
 
<syntaxhighlight lang="perl">print "SPAM\n" while 1;</syntaxhighlight>
<lang perl6>loop {
 
say 'SPAM';
=={{header|Phix}}==
}</lang>
<!--<syntaxhighlight lang="phix">-->
In addition, there are various ways of writing lazy, infinite lists in Perl&nbsp;6:
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
<lang perl6>print "SPAM\n" xx *; # repetition operator
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"SPAM\n"</span><span style="color: #0000FF;">)</span>
print "SPAM\n", ~* ... *; # sequence operator
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
map {say "SPAM"}, ^Inf; # upto operator</lang>
<!--</syntaxhighlight>-->
 
=={{header|Phixmonti}}==
<syntaxhighlight lang="Phixmonti">/# Rosetta Code problem: https://rosettacode.org/w/index.php?title=Loops/Infinite
by Galileo, 11/2022 #/
 
true while "SPAM\n" print true endwhile</syntaxhighlight>
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php">while(1)
echo "SPAM\n";</langsyntaxhighlight>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(loop (prinl "SPAM"))</langsyntaxhighlight>
 
=={{header|Pike}}==
<syntaxhighlight lang ="pike">int main(){
while(1) write("SPAM\n");
write("SPAM\n");
}</lang>
</syntaxhighlight>
 
=={{header|PILOT}}==
<syntaxhighlight lang="pilot">*TypeSpam
type:SPAM
jump:*TypeSpam</syntaxhighlight>
 
=={{header|Pixilang}}==
<syntaxhighlight lang="pixilang">start:
fputs("SPAM\n")
go start</syntaxhighlight>
 
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
<lang PL/I>
do forever;
put list ('SPAM'); put skip;
end;</syntaxhighlight>
end;
 
</lang>
=={{header|PL/M}}==
<syntaxhighlight lang="PL/M">
100H:
BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS;
EXIT: PROCEDURE; CALL BDOS(0,0); END EXIT;
PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT;
 
DECLARE SPAM DATA ('SPAM',0DH,0AH,'$');
 
LOOP: DO;
 
CALL PRINT( .SPAM );
GO TO LOOP;
 
END;
EOF
</syntaxhighlight>
 
=={{header|Plain English}}==
When <code>Repeat.</code> appears by itself, execution proceeds from the beginning of the routine. Normally you would include a conditional statement to break or exit when a condition is met, but not in this case.
<syntaxhighlight lang="plainenglish">To run:
Start up.
Write SPAM forever.
Shut down.
 
To write SPAM forever:
Write "SPAM" to the console.
Repeat.</syntaxhighlight>
 
=={{header|plainTeX}}==
Compile in console mode, with, e.g. "pdftex <file name>".
<syntaxhighlight lang="tex">\newlinechar`\^^J
\def\spam{\message{SPAM^^J}\spam}%
\spam</syntaxhighlight>
 
=={{header|Pop11}}==
<langsyntaxhighlight lang="pop11">while true do
printf('SPAM', '%p\n');
endwhile;</langsyntaxhighlight>
 
=={{header|PostScript}}==
simple infinite loop:
<lang postscript>{}loop</lang>
<syntaxhighlight lang="postscript">{}loop</syntaxhighlight>
 
A bit more complex infinite loop:
<syntaxhighlight lang="postscript">/go {
/spam
{ (SPAM\n) print flush }
bind def % bind and define spam
 
{ spam } % procedure that will be executed by loop and will call spam to print
loop % the loop
}
 
%start spamming!
go</syntaxhighlight>
 
=={{header|PowerShell}}==
<langsyntaxhighlight lang="powershell">for () {
"SPAM"
}</langsyntaxhighlight>
 
=={{header|Prolog}}==
<langsyntaxhighlight lang="prolog">repeat, write('SPAM'), nl, fail.</langsyntaxhighlight>
 
=={{header|Pure Data}}==
 
Screenshot: https://i.imgur.com/IrwaafZ.png
 
<syntaxhighlight lang="pure data">#N canvas 426 88 450 300 10;
#X obj 17 75 print;
#X msg 17 55 SPAM;
#X obj 17 35 metro 1;
#X msg 17 15 1;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;</syntaxhighlight>
 
Notes: the loop is started by clicking the |1(, a [loadbang] could additionally be used. An [until] object, sent a bang, will loop forever, but will hang Pure Data, whereas a high-speed metro will function perfectly.
 
=={{header|PureBasic}}==
===Repeat/Forever===
<langsyntaxhighlight PureBasiclang="purebasic">Repeat
PrintN("SPAM")
ForEver</langsyntaxhighlight>
 
===Goto===
<langsyntaxhighlight PureBasiclang="purebasic">PrintIt:
PrintN("SPAM")
Goto PrintIt</langsyntaxhighlight>
 
=={{header|Python}}==
In Python 2:
<lang python>while 1:
<syntaxhighlight lang="python">while 1:
print "SPAM"</lang>
print "SPAM"</syntaxhighlight>
 
In python 3:
Note: one can also use: "True" or any other non-false value. In Python the following values are false: 0, "" (empty string), (,) and {} and [] (empty tuples, dictionaries or lists), ''None'' (the special object), and the ''False'' object. Any non-empty collection or string or non-zero numeric value is considered "True". However, according to [http://wiki.python.org/moin/PythonSpeed#Takeadvantageofinterpreteroptimizations Python Wiki], for Python versions 2.3+ this variant is optimized by the interpreter and thus is the fastest.
<syntaxhighlight lang="python">while 1:
print("SPAM")</syntaxhighlight>
 
Note: one can also use: "True" or any other non-false value.
In Python the following values are false: 0, "" (empty string), (,) and {} and [] (empty tuples, dictionaries or lists), ''None'' (the special object), and the ''False'' object.
Any non-empty collection or string or non-zero numeric value is considered "True".
However, according to [http://wiki.python.org/moin/PythonSpeed#Takeadvantageofinterpreteroptimizations Python Wiki], for Python versions 2.3+ this variant is optimized by the interpreter and thus is the fastest.
 
=={{header|Quackery}}==
 
<syntaxhighlight lang="quackery">[ say "SPAM" cr again ]</syntaxhighlight>
 
=={{header|R}}==
Note that the default R Gui buffers outputs before pushing them to the screen. To see this run either run in terminal mode, right click on the GUI window and deselect "Buffered Output" prior to execution, or add a call to flush.console() in the loop.
To see this run either run in terminal mode, right click on the GUI window and deselect "Buffered Output" prior to execution, or add a call to flush.console() in the loop.
 
<langsyntaxhighlight Rlang="r">repeat print("SPAM")</langsyntaxhighlight>
 
=={{header|Racket}}==
 
<syntaxhighlight lang="racket">
#lang racket
 
;; Using recursion
(define (loop)
(displayln "SPAM")
(loop))
 
(loop)
 
;; Using a for loop
(for ([i (in-naturals)])
(displayln "SPAM"))
</syntaxhighlight>
 
=={{header|Raku}}==
(formerly Perl 6)
{{works with|Rakudo Star|2010.08}}
 
<syntaxhighlight lang="raku" line>loop {
say 'SPAM';
}</syntaxhighlight>
In addition, there are various ways of writing lazy, infinite lists in Raku:
<syntaxhighlight lang="raku" line>print "SPAM\n" xx *; # repetition operator
print "SPAM\n", ~* ... *; # sequence operator
map {say "SPAM"}, ^Inf; # upto operator</syntaxhighlight>
 
=={{header|Rapira}}==
<syntaxhighlight lang="rapira">while 1 do
output: "SPAM"
od</syntaxhighlight>
 
=={{header|RATFOR}}==
<syntaxhighlight lang="RATFOR">
program loop
 
while (1==1)
write(*,101)"SPAM"
101 format(A)
 
end
</syntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight REBOLlang="rebol">forever [print "SPAM"]</langsyntaxhighlight>
 
=={{header|Red}}==
<syntaxhighlight lang="red">forever [
print "SPAM"
]</syntaxhighlight>
 
=={{header|ReScript}}==
<syntaxhighlight lang="rescript">while true {
Js.log("SPAM")
}</syntaxhighlight>
 
or
 
<syntaxhighlight lang="rescript">let rec inf_loop = () => {
Js.log("SPAM")
inf_loop()
}</syntaxhighlight>
 
=={{header|Retro}}==
<langsyntaxhighlight Retrolang="retro">[ "SPAM\n" puts -1 ] while</langsyntaxhighlight>
 
=={{header|REXX}}==
===simple===
<lang rexx>/*REXX program to display the word SPAM forever. */
<syntaxhighlight lang="rexx">/*REXX program displays the word SPAM forever. */
 
do forever
say "'SPAM"'
end< /*DO forever*/lang>
/*control will never reach here. */
/*don't stick a fork in it. */</syntaxhighlight>
 
=={{header|Ruby}}=esoteric===
<syntaxhighlight lang="rexx">/*REXX program displays the word SPAM forever. */
<lang ruby>loop do
puts "SPAM"
end</lang>
 
do while 1==1 /*esoteric "forever" clause. */
say 'SPAM'
end /*DO while 1==1*/
/*control will never reach here. */
/*don't stick a fork in it. */</syntaxhighlight>
 
===GO TO version===
<syntaxhighlight lang="rexx">/*REXX program displays the word SPAM forever. */
 
tell_it: say 'SPAM'
signal tell_it /*REXX's version of a GO TO */
 
/*control will never reach here. */
/*don't stick a fork in it. */</syntaxhighlight>
===too clever by half===
<syntaxhighlight lang="rexx">/*REXX program displays the word SPAM forever. */
 
do until 0>1 /*too-clever-by-half forever loop*/
say 'SPAM'
end /*DO until 0>1*/
/*control will never reach here. */
/*don't stick a fork in it. */</syntaxhighlight>
 
=={{header|Ring}}==
<syntaxhighlight lang="ring">
while true
see "Spam"
end
</syntaxhighlight>
 
=={{header|Robotic}}==
This will display the word '''SPAM''' at the bottom of the screen indefinitely:
<syntaxhighlight lang="robotic">
: "infinite_loop"
* "SPAM"
goto "infinite_loop"
</syntaxhighlight>
 
=={{header|RPL}}==
Usually in RPL, "printing" an object in RPL means putting it on top of the stack.
In the present case, the loop would not be infinite since sooner or later the stack will overflow.
But if the printer has an infinite paper roll, this will never stop:
≪ "SPAM" '''WHILE''' 1 '''REPEAT''' PR1 '''END''' ≫ EVAL
 
=={{header|Ruby}}==
<syntaxhighlight lang="ruby">loop {puts "SPAM"}
</syntaxhighlight>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">[loop] print "Spam" :goto [loop]
 
while 1
print "Spam"
wend</langsyntaxhighlight>
 
=={{header|Rust}}==
<syntaxhighlight lang="rust">fn main() {
loop {
println!("SPAM");
}
}</syntaxhighlight>
 
=={{header|S-lang}}==
<syntaxhighlight lang="s-lang">forever print("SPAM");</syntaxhighlight>
 
=={{header|Salmon}}==
<langsyntaxhighlight Salmonlang="salmon">while (true)
"SPAM"!;</langsyntaxhighlight>
 
=={{header|Sather}}==
<langsyntaxhighlight lang="sather">class MAIN is
main is
loop
Line 715 ⟶ 2,049:
end;
end;
end;</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">while (true)
println("SPAM")</langsyntaxhighlight>
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="scheme">((lambda (x) (display "SPAM") (newline) (x x))
(lambda (x) (display "SPAM") (newline) (x x)))
</syntaxhighlight>
</lang>
 
or, less Schemishly but with less redundancy:
 
<langsyntaxhighlight lang="scheme">(do () (#f) (display "SPAM") (newline))</langsyntaxhighlight>
 
=={{header|Scilab}}==
{{works with|Scilab|5.5.1}}
<syntaxhighlight lang="text">while %T
printf("SPAM\n")
end</syntaxhighlight>
{{out}}
<pre>SPAM
SPAM
SPAM
SPAM
...</pre>
 
=={{header|sed}}==
<langsyntaxhighlight lang="sed">:loop
s/.*/SPAM/
p
t loop</langsyntaxhighlight>
Sed requires at least one line of input to execute, so run as follows:
<pre>echo | sed ':loop;s/.*/SPAM/;p;t loop'</pre>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const proc: main is func
Line 746 ⟶ 2,092:
writeln("SPAM");
end while;
end func;</langsyntaxhighlight>
 
=={{header|Self}}==
<syntaxhighlight lang="self">['SPAM' printLine] loop</syntaxhighlight>
 
=={{header|Sidef}}==
<syntaxhighlight lang="ruby">loop { say "SPAM!" };</syntaxhighlight>
 
=={{header|Slate}}==
<syntaxhighlight lang ="slate">[inform: 'SPAM'] loop</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
<syntaxhighlight lang="smalltalk">[
<lang smalltalk>[ true ] whileTrue: [ 'SPAM' displayNl ]</lang>
Transcript showCR:'boring stuff'.
] loop
 
[true] whileTrue:[
Transcript showCR:'also borinh'.
]
 
[
Transcript showCR:'poor cpu'.
] doUntil:[false]
 
[
Transcript showCR:'please press CTRL-c!'.
] doWhile:[true]</syntaxhighlight>
 
=={{header|SNOBOL4}}==
<langsyntaxhighlight lang="snobol">loop output = "SPAM" :(loop)
end</langsyntaxhighlight>
 
=={{header|SNUSP}}==
<langsyntaxhighlight lang="snusp">@\>@\>@\>@\>++++++++++===!/ < < < < \
| | | \M=@@@@+@+++++# \.>.>.>.>./
| | \A=@@+@@@@+++#
| \P=@@+@@+@@+++#
\S=@@+@+@@@+++#</langsyntaxhighlight>
 
=={{header|Sparkling}}==
<syntaxhighlight lang="sparkling">while true {
print("SPAM");
}</syntaxhighlight>
 
or
 
<syntaxhighlight lang="sparkling">do {
print("SPAM");
} while true;</syntaxhighlight>
 
or
 
<syntaxhighlight lang="sparkling">for var b = true; b; b = true {
printf("SPAM\n");
}</syntaxhighlight>
 
etc.
 
=={{header|Spin}}==
{{works with|BST/BSTC}}
{{works with|FastSpin/FlexSpin}}
{{works with|HomeSpun}}
{{works with|OpenSpin}}
<syntaxhighlight lang="spin">con
_clkmode = xtal1 + pll16x
_clkfreq = 80_000_000
 
obj
ser : "FullDuplexSerial.spin"
 
pub main
ser.start(31, 30, 0, 115200)
 
repeat
ser.str(string("SPAM",13,10))
 
waitcnt(_clkfreq + cnt)
ser.stop
cogstop(0)</syntaxhighlight>
 
=={{header|SPL}}==
<syntaxhighlight lang="spl">>
#.output("SPAM")
<</syntaxhighlight>
 
=={{header|SQL PL}}==
{{works with|Db2 LUW}} version 9.7 or higher.
With SQL PL:
<syntaxhighlight lang="sql pl">
--#SET TERMINATOR @
 
SET SERVEROUTPUT ON@
 
BEGIN
DECLARE I SMALLINT DEFAULT 1;
WHILE (I = I) DO
CALL DBMS_OUTPUT.PUT_LINE('SPAM');
END WHILE;
END @
</syntaxhighlight>
Output:
<pre>
db2 -td@
db2 => SET SERVEROUTPUT ON@
 
db2 => BEGIN
...
db2 (cont.) => END @
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL20511N There is not enough available space in the "DBMS_OUTPUT" message
buffer. SQLSTATE=54035
 
SPAM
SPAM
SPAM
SPAM
...
</pre>
 
=={{header|Standard ML}}==
<langsyntaxhighlight lang="sml">while true do
print "SPAM\n";</langsyntaxhighlight>
 
or
 
<langsyntaxhighlight lang="sml">let
fun inf_loop () = (
print "SPAM\n";
Line 778 ⟶ 2,225:
in
inf_loop ()
end</langsyntaxhighlight>
 
Seen like this it looks like the "too much functional" danger when a "while" loop looks far simpler, but the functional loop may be useful to provide data to the next loop without using mutable variable.
 
=={{header|Stata}}==
 
<syntaxhighlight lang="stata">while 1 {
display "SPAM"
}</syntaxhighlight>
 
=== Mata ===
<syntaxhighlight lang="stata">while (1) printf("SPAM\n")</syntaxhighlight>
 
Also possible with a '''[https://www.stata.com/help.cgi?m2_for for]''' loop, but unlike C, the middle expression is not optional:
 
<syntaxhighlight lang="stata">for (;1;) printf("SPAM\n")</syntaxhighlight>
 
=={{header|Swift}}==
<syntaxhighlight lang="swift">while true {
println("SPAM")
}</syntaxhighlight>
 
=={{header|SystemVerilog}}==
 
<langsyntaxhighlight SystemVeriloglang="systemverilog">program main;
initial forever $display("SPAM");
endprogram
</syntaxhighlight>
</lang>
=={{header|TailDot}}==
 
<syntaxhighlight lang="taildot">c,x,SPAM,v,x,j,3</syntaxhighlight>
=={{header|Transact-SQL}}==
=={{header|Tailspin}}==
 
<syntaxhighlight lang="tailspin">
<lang sql>WHILE 1=1 BEGIN
'SPAM$#10;' -> \(
PRINT "SPAM"
<> $ -> !OUT::write
END</lang>
$ -> #
\) -> !VOID
</syntaxhighlight>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">while true {
puts SPAM
}
Line 802 ⟶ 2,270:
for {} 1 {} {
puts SPAM
}</langsyntaxhighlight>
 
=={{header|TI-83 BASIC}}==
Line 808 ⟶ 2,276:
There are a few ways to achieve this in TI-83 BASIC
 
<langsyntaxhighlight lang="ti83b">
:Lbl 1
:Disp "SPAM
:Goto 1
</syntaxhighlight>
</lang>
 
Another way is by using a While loop
 
<langsyntaxhighlight lang="ti83b">
:While 1
:Disp "SPAM
:End
</syntaxhighlight>
</lang>
 
=={{header|TI-89 BASIC}}==
 
<langsyntaxhighlight lang="ti89b">Loop
Disp "SPAM"
EndLoop</langsyntaxhighlight>
 
=={{header|TorqueScript}}==
<langsyntaxhighlight Torquelang="torque">While(1)
echo("SPAM");</langsyntaxhighlight>
 
=={{header|Transact-SQL}}==
 
<syntaxhighlight lang="sql">WHILE 1=1 BEGIN
PRINT "SPAM"
END</syntaxhighlight>
 
=={{header|Trith}}==
<langsyntaxhighlight lang="trith">["SPAM" print] loop</langsyntaxhighlight>
 
=={{header|TUSCRIPT}}==
TUSCRIPT has no infinite loop. 999999999 loops are the limit.
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
LOOP/999999999
print "spam"
ENDLOOP
</syntaxhighlight>
</lang>
 
=={{header|UNIX Shell}}==
Line 848 ⟶ 2,322:
 
Use any of these loops:
<langsyntaxhighlight lang="bash">while :; do echo SPAM; done</langsyntaxhighlight>
 
<langsyntaxhighlight lang="bash">while true; do echo "SPAM"; done</langsyntaxhighlight>
 
<langsyntaxhighlight lang="bash">until false; do echo "SPAM"; done</langsyntaxhighlight>
 
{{works with|bash}}
Line 858 ⟶ 2,332:
{{works with|zsh}}
 
<langsyntaxhighlight lang="bash">for ((;;)); do echo "SPAM"; done</langsyntaxhighlight>
 
==={{header|C Shell}}===
<langsyntaxhighlight lang="bash">while (1)
echo SPAM
end</langsyntaxhighlight>
 
==={{header|es}}===
<syntaxhighlight lang ="es">forever {echo SPAM}</langsyntaxhighlight>
 
=={{header|UnixPipes}}==
<syntaxhighlight lang ="bash">yes SPAM</langsyntaxhighlight>
 
=={{header|Unlambda}}==
<langsyntaxhighlight lang="unlambda"> ``ci``s``s`kr``s``s``s``s`k.S`k.P`k.A`k.Mii</langsyntaxhighlight>
 
=={{header|Ursa}}==
{{trans|Python}}
<syntaxhighlight lang="ursa">while true
out "SPAM" endl console
end while</syntaxhighlight>
=={{header|Uxntal}}==
<syntaxhighlight lang="Uxntal">
|0100
&l ;SPAM <print-str> !&l
 
@<print-str> ( str* -- )
&while ( -- )
LDAk #18 DEO
INC2 LDAk ?&while
POP2 JMP2r
 
@SPAM
"SPAM 0a $1</syntaxhighlight>
 
=={{header|V}}==
<langsyntaxhighlight lang="v">true [
'SPAM' puts
] while</langsyntaxhighlight>
 
=={{header|Vala}}==
<langsyntaxhighlight lang="vala">for(;;) stdout.printf("SPAM\n");</langsyntaxhighlight>
<langsyntaxhighlight lang="vala">while(true) stdout.printf("SPAM\n");</langsyntaxhighlight>
<langsyntaxhighlight lang="vala">do stdout.printf("SPAM\n"); while(true);</langsyntaxhighlight>
 
=={{header|Vale}}==
{{works with|Vale|0.2.0}}
<syntaxhighlight lang="vale">
import stdlib.*;
 
exported func main() {
while true {
println("SPAM");
}
}
</syntaxhighlight>
 
=={{header|VAX Assembly}}==
<syntaxhighlight lang="vax assembly"> 0000 0000 1 .entry main,0
4D415053 8F DD 0002 2 pushl #^a"SPAM" ;string on stack
5E DD 0008 3 pushl sp ;reference to string
04 DD 000A 4 pushl #4 ;+length = descriptor
000C 5 loop:
5E DD 000C 6 pushl sp ;descriptor by reference
00000000'GF 01 FB 000E 7 calls #1, g^lib$put_output ;show message
F5 11 0015 8 brb loop ;forever
0017 9
0017 10 .end main</syntaxhighlight>
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">Do
Debug.Print "SPAM"
Loop</syntaxhighlight>
 
=={{header|VBScript}}==
<syntaxhighlight lang="vb">Do
WScript.Echo("SPAM")
Loop</syntaxhighlight>
 
=={{header|Vedit macro language}}==
<langsyntaxhighlight lang="vedit">while (1) {
Message("Spam\n")
}</langsyntaxhighlight>
or:
<langsyntaxhighlight lang="vedit">do {
Message("Spam\n")
} while (1)</langsyntaxhighlight>
or:
<langsyntaxhighlight lang="vedit">for (;1;) {
Message("Spam\n")
}</langsyntaxhighlight>
"Nearly infinite" loop can be done by using constant ALL (=1073741824) as repeat count:
<langsyntaxhighlight lang="vedit">Repeat (ALL) {
Message("Spam\n")
}</langsyntaxhighlight>
 
=={{header|Visual Basic}}==
<langsyntaxhighlight lang="vb">Do
Debug.Print("SPAM")
Loop</langsyntaxhighlight>
 
=={{header|Visual Basic .NET}}==
'''Platform:''' [[.NET]]
{{works with|Visual Basic .NET|9.0+}}
<langsyntaxhighlight lang="vbnet">Do
Console.WriteLine("SPAM")
Loop</langsyntaxhighlight>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">fn main() {
for {
print("SPAM\n")
}
}</syntaxhighlight>
 
=={{header|Wart}}==
<syntaxhighlight lang="wart">repeat :forever
prn "spam"</syntaxhighlight>
 
=={{header|Wee Basic}}==
<syntaxhighlight lang="wee basic">let loop=1
while loop=1
print 1 "SPAM"
wend
end</syntaxhighlight>
 
 
=={{header|Whenever}}==
<syntaxhighlight lang="whenever">
1 print("SPAM");
1;
</syntaxhighlight>
 
 
=={{header|Wren}}==
<syntaxhighlight lang="wren">while (true) System.print("SPAM")</syntaxhighlight>
 
=={{header|X86 Assembly}}==
{{works with|NASM|Linux}}
<langsyntaxhighlight lang="asm">
section .text
global _start
Line 929 ⟶ 2,486:
msg db "SPAM",0xa
len equ $-msg
</syntaxhighlight>
</lang>
 
=={{header|XLISP}}==
It is of course possible to use a <code>WHILE</code> loop with a condition that will always evaluate to true:
<syntaxhighlight lang="lisp">(defun keep-printing-spam ()
(while t
(display "SPAM")
(newline) ) )</syntaxhighlight>
Although this idiom is very common (in many programming languages), however, it feels a bit like a misuse of a looping construct that is meant to be conditional. If an unconditional jump is really what we want, then that is what we have <tt>goto</tt> for; or rather, in XLISP we do not have <tt>goto</tt> (in so many words) but we can achieve the effect of it using tail recursion.
<syntaxhighlight lang="lisp">(defun keep-printing-spam ()
(display "SPAM")
(newline)
(keep-printing-spam) )</syntaxhighlight>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code Text=12;
loop Text(0, "SPAM
")</langsyntaxhighlight>
 
=={{header|Z80 Assembly}}==
Line 940 ⟶ 2,509:
Using the Amstrad CPC firmware:
 
<langsyntaxhighlight lang="z80">org $4000
 
txt_output: equ $bb5a
Line 953 ⟶ 2,522:
jr print
 
spam: defm "SPAM\r\n\0"</langsyntaxhighlight>
 
=={{header|Zig}}==
<syntaxhighlight lang="zig">
const std = @import("std");
pub fn main() !void {
const stdout_wr = std.io.getStdOut().writer();
while (true) try stdout_wr.writeAll("SPAM\n");
}
</syntaxhighlight>
=={{header|zkl}}==
<syntaxhighlight lang="zkl">while(1) { println("SPAM") }
while(True){ println("SPAM") }
foreach _ in ([0..]){ println("SPAM") }
[0..].pump(Console.println,T(Void,"SPAM"));
[0..].pump(fcn{ println("SPAM") });
fcn{ println("SPAM"); return(self.fcn()) }(); // tail recursive lambda</syntaxhighlight>
 
{{omit from|GUISS}}
 
=={{header|Zoomscript}}==
For typing:
<syntaxhighlight lang="zoomscript">var loop
loop = 1
while ne loop 0
print "SPAM"
println
endwhile</syntaxhighlight>
For importing:
 
¶0¶var loop¶0¶loop = 1¶0¶while ne loop 0¶1¶print "SPAM"¶1¶println¶0¶endwhile