LOOP (programovací jazyk) - LOOP (programming language) - Wikipedia
SMYČKA je jazyk, který přesně zachycuje primitivní rekurzivní funkce.[1]Jediné operace podporované v jazyce jsou přiřazení, přidání a opakování několikrát, které jsou opraveny před spuštěním provádění smyčky.
Jazyk LOOP byl představen v článku z roku 1967 autorem Albert R. Meyer a Dennis M. Ritchie. [2]Meyer a Ritchie ukázali shodu mezi jazykem LOOP a primitivní rekurzivní funkce.
Dennis M. Ritchie formuloval jazyk LOOP, který byl také tématem jeho nepublikovaného Ph.D. teze.[3][4]
To bylo také předloženo Uwe Schöning, spolu s JÍT DO a ZATÍMCO.[5]
Funkce
Každý primitivní rekurzivní funkce je LOOP-vypočítatelný a naopak.[6]
Na rozdíl od JÍT DO programy a ZATÍMCO programy, LOOP programy vždy vypovědět.[7] Proto je sada funkcí vypočítatelných programy LOOP správnou podmnožinou vypočítatelné funkce (a tedy podmnožina vypočítatelná programovými funkcemi WHILE a GOTO).[8]
Příkladem celkové vypočítatelné funkce, kterou nelze vypočítat pomocí LOOP, je Ackermannova funkce.[9]
Formální definice
Syntax
Programy LOOP se skládají ze symbolů SMYČKA
, DĚLAT
, KONEC
, :=
, +
, -
a ;
stejně jako libovolný počet proměnných a konstant. Programy LOOP mají následující syntax v upraveném Backus – Naurova forma:
Tady, jsou názvy proměnných a jsou konstanty.
Sémantika
Li P je program LOOP, P je ekvivalentní funkci . Proměnné přes v programu LOOP odpovídají argumentům funkce a jsou inicializovány před spuštěním programu s příslušnými hodnotami. Všechny ostatní proměnné mají počáteční hodnotu nula. Proměnná odpovídá hodnotě, která bere při zadání hodnot argumentů z přes .
Prohlášení o formuláři
Xi := 0
znamená hodnotu proměnné je nastavena na 0.
Prohlášení o formuláři
Xi : = xi + 1
znamená hodnotu proměnné je zvýšen o 1.
Prohlášení o formuláři
P1; P2
představuje postupné provádění podprogramů a v tomto pořadí.
Prohlášení o formuláři
LOOP x DO P KONEC
znamená opakované provádění dílčího programu celkem krát, kde hodnota, která má na začátku provádění příkazu použito. I kdyby změní hodnotu , neovlivní to, kolikrát se provádí ve smyčce. Li má tedy hodnotu nula není proveden uvnitř SMYČKA
prohlášení. To umožňuje větve v programech LOOP, kde podmíněné provedení částečného programu závisí na tom, zda má proměnná hodnotu nula nebo jedna.
Ukázkové programy
Úkol
Následující program LOOP přiřadí hodnotu proměnné xi do proměnné xj.
Xj : = 0; LOOP xi DO xj : = xj + 1END
Ve své seminární práci [10] Meyer a Ritchie zadali úkol základní prohlášení. Jak ukazuje výše uvedený program, přiřazení je nadbytečné a lze jej odebrat ze seznamu základních příkazů. Může být použit jako podprogram v jiných programech LOOP. Syntaxi LOOP lze rozšířit pomocí následujícího příkazu, který odpovídá volání výše uvedeného jako podprogramu:
Xj : = xi
Poznámka: Je třeba mít na paměti, že všechny proměnné jsou globální. Že nové tvrzení je ekvivalentní podprogramu to neznamená, že je podprogram. Normálně aktivační záznam brání všem vedlejším účinkům. V tomto případě však žádná jiná proměnná kromě xj je ovlivněn, takže nedochází k vedlejším účinkům za předpokladu, že xj, které v tomto okamžiku při provádění programu mohou obsahovat nenulovou hodnotu, je inicializováno na 0.
Projekce
Zvláštní případ přiřazovacího programu je program (používáme rozšířenou notaci):
X0 : = xi
Tento program počítá funkci k-aryho projekce , který extrahuje i-tu souřadnici z objednané k-n-tice.
Předchůdce
Funkce předchůdce je definována jako
- .
Tuto funkci lze vypočítat následujícím programem LOOP, který nastavuje proměnnou na .
/ * předpoklad: x2 = 0 * / LOOP x1 DO x0 : = 0; LOOP x2 DO x0 : = x0 + 1 KONEC; X2 : = x2 + 1END
Tento program lze použít jako podprogram v jiných programech LOOP. Syntaxi LOOP lze rozšířit pomocí následujícího příkazu, který odpovídá volání výše uvedeného jako podprogramu:
X0 : = x1 ∸ 1
Poznámka: Opět je třeba si uvědomit vedlejší účinky. Program předchůdce mění proměnnou x2, které by se mohly používat jinde. Chcete-li rozšířit příkaz x0 : = x1 ∸ 1, lze inicializovat proměnné xn, Xn + 1 a xn + 2 (pro dostatečně velké n) na 0, x1 a 0, spustit kód na těchto proměnných a zkopírovat výsledek (xn) až x0. Kompilátor to může udělat.
Přidání
V následujícím programu proměnná je nastaven na součet proměnných a .
LOOP x1 DO x0 : = x0 + 1END; LOOP x2 DO x0 : = x0 + 1END
Tento program lze použít jako podprogram v jiných programech LOOP. Syntaxi LOOP lze rozšířit pomocí následujícího příkazu, který odpovídá volání výše uvedeného jako podprogramu:
X0 : = x1 + x2
Mezní odčítání
Pokud je v programu „sčítání“ nad druhou smyčkou decrement x0 namísto přírůstku program vypočítá rozdíl (odříznutý v 0) proměnných a .
X0 : = x1LOOP x2 DO x0 : = x0 ∸ 1END
Stejně jako dříve můžeme rozšířit syntaxi LOOP pomocí příkazu:
X0 : = x1 ∸ x2
Násobení
Následující program LOOP nastavuje hodnotu proměnné k součinu proměnných a .
LOOP x1 DO x0 : = x0 + x2KONEC
Tento multiplikační program používá syntaxi zavedenou podprogramem přidání z předchozího příkladu. Násobení se zde provádí přidáním hodnoty celkem časy ukládání výsledků do .
Jestliže pak jinak
Příkaz if-then-else s if x1 > x2 pak P1 else P2:
Xn1 : = x1 ∸ x2;Xn2 : = 0; xn3 : = 1; LOOP xn1 DO xn2 : = 1; Xn3 : = 0END; LOOP xn2 DO P1END; LOOP xn3 DO P2END;
Viz také
Poznámky a odkazy
- ^ Herbert Enderton (2012). Teorie vypočítatelnosti. Akademický tisk.
- ^ Meyer, Albert R.; Ritchie, Dennis M. (1967). Složitost smyčkových programů. ACM '67: Sborník příspěvků z 22. národní konference v roce 1967. doi:10.1145/800196.806014.
- ^ „Objevování ztracené disertační práce Dennise Ritchieho“. CHM. 2020-06-19. Citováno 2020-07-14.
- ^ "Struktura programu a návrh výpočetní složitosti | 102790971 | Muzeum počítačové historie". www.computerhistory.org. Citováno 2020-07-14.
- ^ Schöning, Uwe (2008). Theoretische Informatik-kurz gefasst (5 ed.). London: Oxford University Press. str. 105. ISBN 978-3-8274-1824-1. DNB 986529222.
- ^ Schöning, Uwe (2008). Theoretische Informatik-kurz gefasst (5 ed.). London: Oxford University Press. str. 105. ISBN 978-3-8274-1824-1. DNB 986529222.
- ^ Schöning, Uwe (2008). Theoretische Informatik-kurz gefasst (5 ed.). London: Oxford University Press. str. 93. ISBN 978-3-8274-1824-1. DNB 986529222.
- ^ Schöning, Uwe (2001). Theoretische Informatik-kurz gefasst (4. vyd.). London: Oxford University Press. str. 122. ISBN 3-8274-1099-1.
- ^ Schöning, Uwe (2008). Theoretische Informatik-kurz gefasst (5 ed.). London: Oxford University Press. str. 112. ISBN 978-3-8274-1824-1. DNB 986529222.
- ^ Meyer & Ritchie: Složitost smyčkových programů, ACM 1967