|
|
Line 1: |
Line 1: |
| {{Other uses|LOOP (disambiguation){{!}}LOOP}}
| | Letrado desde hace 20 años<br><br>My page; [http://www.acanizaresabogados.com/abogados-divorcios/ abogado divorcio] |
| | |
| '''LOOP''' is a pedagogical programming language designed by [[Uwe Schöning]], along with [[GOTO (programming language)|GOTO]] and [[WHILE (programming language)|WHILE]]. The only operations supported in the language are assignment, addition and looping.
| |
| | |
| The key property of the LOOP language is that the functions it can compute are exactly the [[primitive recursive function]]s.<ref>{{cite book|author=Herbert Enderton|year=2012|title=Computability Theory|publisher=Academic Press}}</ref>
| |
| | |
| == Features ==
| |
| Each [[primitive recursive function]] is LOOP-computable and vice versa.<ref>{{Cite book | first=Uwe | last=Schöning | title=Theoretische Informatik-kurz gefasst | edition=5 | publisher=Oxford University Press | location=London | year=2008 | page=105 | ISBN=978-3-8274-1824-1 | dnb=986529222}}</ref>
| |
| | |
| In contrast to [[GOTO (programming language)|GOTO]] programs and [[WHILE (programming language)|WHILE]] programs, LOOP programs always [[terminating computation|terminate]].<ref>{{Cite book | first=Uwe | last=Schöning | title=Theoretische Informatik-kurz gefasst | edition=5 | publisher=Oxford University Press | location=London | year=2008 | page=93 | ISBN=978-3-8274-1824-1 | dnb=986529222}}</ref> Therefore, the set of functions computable by LOOP-programs is a proper subset of [[computable function]]s (and thus a subset of the computable by WHILE and GOTO program functions).<ref>{{Cite book | first=Uwe | last=Schöning | edition=4 | title=Theoretische Informatik-kurz gefasst | year=2001 | publisher=Oxford University Press | location=London | page=122 | ISBN=3-8274-1099-1}}</ref>
| |
| | |
| An example of a total computable function that is not LOOP computable is the [[Ackermann function]].<ref>{{Cite book | first=Uwe | last=Schöning | title=Theoretische Informatik-kurz gefasst | edition=5 | publisher=Oxford University Press | location=London | year=2008 | page=112 | ISBN=978-3-8274-1824-1 | dnb=986529222}}</ref>
| |
| | |
| == Formal definition ==
| |
| | |
| === Syntax ===
| |
| LOOP-programs consist of the symbols <code>LOOP</code>, <code>DO</code>, <code>END</code>, <code>:=</code>, <code>+</code>, <code>-</code> and <code>;</code> as well as any number of variables and constants. LOOP-programs have the following [[syntax]] in modified [[Backus-Naur Form]]:
| |
| | |
| :<math>\begin{array}{lrl}
| |
| P & := & x_i := x_j + c \\
| |
| & | & x_i := x_j - c \\
| |
| & | & P;P \\
| |
| & | & \mathrm{LOOP} \, x_i \, \mathrm{DO} \, P \, \mathrm{END}
| |
| \end{array}
| |
| </math>
| |
| Here, <math>Var := \{ x_0, x_1, ... \}</math> are variable names and <math>c \in \mathbb{N}</math> are constants.
| |
| | |
| === Semantics ===
| |
| If '''P''' is a LOOP program, '''P''' is equivalent to a function <math>f: \mathbb{N}^k \rightarrow \mathbb{N}</math>. The variables <math>x_1</math> through <math>x_k</math> in a LOOP program correspond to the arguments of the function <math>f</math>, and are initialized before program execution with the appropriate values. All other variables are given the initial value zero. The variable <math>x_0</math> corresponds to the value that <math>f</math> takes when given the argument values from <math>x_1</math> through <math>x_k</math>.
| |
| | |
| A statement of the form
| |
| x<sub>0</sub> := x<sub>1</sub> + c
| |
| means the value of the constant <math>c</math> is added to the value of the variable <math>x_1</math>, and the result is set as the value of the variable <math>x_0</math>. <math>c</math> can have the value zero, which allows the value of one variable to be assigned to another variable:
| |
| x<sub>0</sub> := x<sub>1</sub> + 0
| |
| | |
| A statement of the form
| |
| x<sub>0</sub> := x<sub>1</sub> - c
| |
| means the value of the constant <math>c</math>is subtracted from the value of the variable <math>x_1</math>, and the result is set as the value of the variable <math>x_0</math>. Negative numbers aren't allowed, and are replaced by zeros.
| |
| | |
| Variables are allowed to be simultaneously on the left and right side of an assignment. A statement of the form:
| |
| x<sub>1</sub>: = x<sub>1</sub> + c
| |
| for example, adds the value of the constant <math>c</math> to the variable <math>x_1</math>.
| |
| | |
| A statement of the form
| |
| ''P''<sub>1</sub>; ''P''<sub>2</sub>
| |
| represents the sequential execution of sub-programs <math>P_1</math> and <math>P_2</math>, in that order.
| |
| | |
| A statement of the form
| |
| LOOP x DO ''P'' END
| |
| means the repeated execution of the partial program <math>P</math> a total of <math>x</math> times, where the value that <math>x</math> has at the beginning of the execution of the statement is used. Even if <math>P</math> changes the value of <math>x</math>, it won't affect how many times <math>P</math> is executed in the loop. If <math>x</math> has the value zero, then <math>P</math> is not executed inside the <code>LOOP</code> statement. This allows for [[Conditional (programming)|branches]] in LOOP programs, where the conditional execution of a partial program depends on whether a variable has value zero or one.
| |
| | |
| == Example Programs ==
| |
| | |
| === Addition ===
| |
| In the following program, the variable <math>x_0</math> is set to the sum of the variables <math>x_1</math> and <math>x_2</math>.
| |
| x<sub>0</sub> := x<sub>1</sub> + 0;
| |
| LOOP x<sub>2</sub> DO
| |
| x<sub>0</sub> := x<sub>0</sub> + 1
| |
| END
| |
| #
| |
| <math>x_0</math> is first assigned the value of <math>x_1</math>. Then, <math>x_0</math> is incremented a total of <math>x_2</math> times by the <code>LOOP</code> statement. This program can be used as a subroutine in other LOOP programs. The LOOP syntax can be extended with the following statement, equivalent to calling the above as a subroutine:
| |
| x<sub>0</sub> := x<sub>1</sub> + x<sub>2</sub>
| |
| | |
| === Multiplication ===
| |
| The following LOOP program sets the value of the variable <math>x_0</math> to the product of the variables <math>x_1</math> and <math>x_2</math>.
| |
| LOOP x<sub>1</sub> DO
| |
| x<sub>0</sub> := x<sub>0</sub> + x<sub>2</sub>
| |
| END
| |
| #
| |
| This multiplication program uses the syntax introduced by the addition subroutine from the previous example. The multiplication is performed here by adding the value of <math>x_2</math> a total of <math>x_1</math> times, storing results in <math>x_0</math>.
| |
| | |
| == See also ==
| |
| * [[μ-recursive function]]
| |
| | |
| == Notes and references ==
| |
| <references />
| |
| | |
| == External links ==
| |
| * [http://web.archive.org/web/20120311032544/http://loopgotowhile.eugenkiss.com/ Loop, Goto & While]
| |
| | |
| [[Category:Computability theory]]
| |
Letrado desde hace 20 años
My page; abogado divorcio