LOOP (programozási nyelv) - LOOP (programming language)
A LOOP egy egyszerű regiszternyelv, amely pontosan rögzíti a primitív rekurzív függvényeket . A nyelv a számlálógép modellből származik . A számlálógépekhez hasonlóan a LOOP nyelv egy vagy több korlátlan regisztert tartalmaz , amelyek mindegyike egyetlen nem negatív egész számot tartalmazhat. Néhány aritmetikai utasítás (például „CleaR”, „INCrement”, „DECrement”, „CoPY”, ...) működik a regisztereken. Az egyetlen vezérlési folyamat utasítás ' LOOP x DO ... END' . Ez azt eredményezi, hogy a hatókörébe tartozó utasításokat x -szer megismétlik. (Az x regiszter tartalmának a ciklus végrehajtása során bekövetkezett változásai nem befolyásolják az áthaladások számát.)
Történelem
A LOOP nyelvet 1967 -ben Albert R. Meyer és Dennis M. Ritchie fogalmazta meg . Megmutatták a LOOP nyelv és a primitív rekurzív függvények közötti megfelelést .
Ez a nyelv volt a témája Ritchie kiadatlan PhD dolgozatának.
Uwe Schöning is bemutatta , a GOTO és a WHILE mellett .
Tervezési filozófia és funkciók
A GOTO programokkal és a WHILE programokkal ellentétben a LOOP programok mindig leállnak . Ezért a LOOP programok által kiszámítható függvényhalmaz a számítható függvények megfelelő részhalmaza (és így a WHILE és GOTO programfüggvények által kiszámítható részhalmaz).
Meyer & Ritchie bebizonyította, hogy minden primitív rekurzív függvény LOOP-kalkulálható és fordítva.
Példa egy teljes számítható függvényre, amely nem LOOP számítható, az Ackermann függvény .
Formális meghatározás
Szintaxis
Loop-programok állnak a szimbólumokat LOOP, DO, END, :=, +és ;, valamint tetszőleges számú változók és konstansok. A LOOP programok a következő szintaxissal rendelkeznek módosított Backus – Naur formában :
Itt vannak változónevek és konstansok.
Szemantika
Ha P LOOP program, akkor P egy függvénynek felel meg . A változók segítségével a hurok Program megfelel az érveket a funkciót , és inicializálása előtt a program végrehajtása a megfelelő értékeket. Minden más változó nulla kezdeti értéket kap. A változó annak az értéknek felel meg, amely az argumentumértékek megadásától kezdve történik .
Az űrlap nyilatkozata
xi := 0
azt jelenti, hogy a változó értéke 0 -ra van állítva.
Az űrlap nyilatkozata
xi := xi + 1
azt jelenti, hogy a változó értéke 1 -gyel növekszik.
Az űrlap nyilatkozata
P1; P2
képviseli a szekvenciális végrehajtását alprogramok és , ebben a sorrendben.
Az űrlap nyilatkozata
LOOP x DO P END
a részprogram ismételt végrehajtását jelenti, összesen , ahol az utasítás végrehajtásának elején lévő értéket használjuk. Még ha megváltoztatja is a értékét , ez nem befolyásolja, hogy hányszor hajtódik végre a ciklusban. Ha értéke nulla, akkor nem hajtódik végre a LOOP utasításban. Ez lehetővé teszi az elágazásokat a LOOP programokban, ahol a részleges program feltételes végrehajtása attól függ, hogy egy változó értéke nulla vagy egy.
"Kényelmi utasítások" létrehozása
Az alap szintaxisból hozzon létre "kényelmi utasításokat". Ezek nem hagyományos értelemben vett szubrutinok, hanem az alap szintaxisból létrehozott és mnemonikus LOOP programok. Formai értelemben ezeknek a programoknak a használatához vagy (i) "ki kell terjeszteni" őket a kódba - ideiglenes vagy "segéd" változók használatát kell megkövetelniük, ezért ezt figyelembe kell venni, vagy (ii) meg kell tervezni a szintaxis a „beépített” utasításokkal.
- Példa
A k-ary vetítési függvény kivonja az i-edik koordinátát egy rendezett k-sorból.
Meyer & Ritchie alapdokumentumukban alapvető kijelentéssé tették a feladatot . Ahogy a példa is mutatja, a hozzárendelés az alapvető állítások listájából származtatható.
Az utasítás létrehozásához használja az alábbi kódblokkot. Figyelje meg a fent említett tipp használatát:
= ekv
xj := 0; LOOP xi DO xj := xj + 1 END
Mindez megint csak a kényelem kedvéért; ezek egyike sem növeli a modell belső erejét.
Példa programok
Kiegészítés
Amellett van rekurzívan definiáljuk:
Itt S -t "utódként" kell értelmezni.
A hiperoperatív szekvenciában ez a függvény
az ADD LOOP programmal valósítható meg (x 1 , x 2 )
LOOP x1 DO x0 := x0 + 1 END; LOOP x2 DO x0 := x0 + 1 END
Szorzás
A szorzás a hiperműveleti függvény
a MULT LOOP programmal valósítható meg (x 1 , x 2 )
x0 := 0; LOOP x2 DO x0 := ADD( x1, x0) END
A program az ADD () programot használja "kényelmi utasításként". Bővítve a MULT program egy LOOP program, két beágyazott LOOP utasítással. Az ADD egynek számít.
Több hiperoperátor
Ha egy hiperoperációs funkcióhoz LOOP programot adunk , akkor LOOP programot készíthetünk a következő szintre
például (ami a hatványozást jelenti ) a LOOP POWER (x 1 , x 2 ) programmal valósítható meg
x0 := 1; LOOP x2 DO x0 := MULT( x1, x0 ) END
A kiterjesztett hatványozó program három egymásba ágyazott LOOP utasítást tartalmaz.
Előző
Az előd funkciót úgy definiáljuk
- .
Ezt a függvényt a következő LOOP program számíthatja ki, amely a változót erre állítja .
/* precondition: x2 = 0 */ LOOP x1 DO x0 := x2; x2 := x2 + 1 END
Bővítve, ez a program
/* precondition: x2 = 0 */
LOOP x1 DO
x0 := 0;
LOOP x2 DO
x0 := x0 + 1
END;
x2 := x2 + 1
END
Ez a program alprogramként használható más LOOP programokban. A LOOP szintaxis a következő utasítással bővíthető, ami megegyezik a fentiek alprogramként való meghívásával:
x0 := x1 ∸ 1
Megjegyzés : Ismét figyelembe kell venni a mellékhatásokat. Az elődprogram megváltoztatja az x 2 változót , amely máshol is használatban lehet. Bővíteni a nyilatkozatot x 0 : = x 1 ∸ 1, lehetett inicializálni az x n , x n + 1 , és x n + 2 (egy elég nagy n) 0, x 1 és 0, illetve, futtatja a kódot ezeket a változókat, és másolja az eredményt (x n ) x 0 -ba . Ezt egy fordító is megteheti.
Kivágás levonása
Ha a második ciklus feletti „összeadás” programban a növekmény helyett x 0 -ra csökken , akkor a program kiszámítja a változók ( és 0 -nál levágott) különbségét és .
x0 := x1 LOOP x2 DO x0 := x0 ∸ 1 END
Mint korábban, a LOOP szintaxist kibővíthetjük a következő kijelentéssel:
x0 := x1 ∸ x2
Ha máskor
If-then-else utasítás, ha x 1 > x 2, majd P1 else P2:
xn1 := x1 ∸ x2; xn2 := 0; xn3 := 1; LOOP xn1 DO xn2 := 1; xn3 := 0 END; LOOP xn2 DO P1 END; LOOP xn3 DO P2 END;
Lásd még
Jegyzetek és hivatkozások
Bibliográfia
- Axt, Pál (1966). "A relatív primitív rekurzió megismétlése". Mathematische Annalen . 167 : 53–55. doi : 10.1007/BF01361215 .
- Axt, Pál (1970). "A primitív rekurzió megismétlése" . Journal of Symbolic Logic . 35 (3): 479. doi : 10.1002/malq.19650110310 .
- Calude, Cristian (1988). A számítási komplexitás elméletei . A diszkrét matematika évkönyvei . 35 . Észak -Holland Könyvkiadó . ISBN 9780080867755.
- Cserniavszkij, János Károly (1976). "Az egyszerű programok pontosan a burburgeri képleteket valósítják meg". SIAM Journal on Computing . 5 (4): 666–677. doi : 10.1137/0205045 .
- Cserniavszkij, János Károly; Kamin, Samuel Noah (1979). "Teljes és következetes Hoare axiomatika egy egyszerű programozási nyelvhez". Számítógépes Szövetség . 26 (1): 119–128. doi : 10.1145/322108.322120 .
- Rendőr, Robert L .; Borodin, Allan B (1972). "Szubrekurzív programozási nyelvek, I. rész: Hatékonyság és programstruktúra". Az ACM folyóirata . 19 (3): 526–568. doi : 10.1145/321707.321721 .
- Crolard, Tristan; Lacas, Sámuel; Valarcher, Pierre (2006). "A huroknyelv kifejező erejéről" . Nordic Journal of Computing . 13 : 46–57.
- Crolard, Tristan; Polonowski, Emmanuel; Valarcher, Pierre (2009). "A ciklusnyelv kiterjesztése magasabb rendű eljárási változókkal". ACM Transactions on Computational Logic . 10. (4) bekezdése.
- Enderton, Herbert (2012). Számíthatóság elmélete . Academic Press. doi : 10.1145/1555746.1555750 .
- Fachini, Emanuela; Maggiolo-Schettini, Andrea (1979). "A primitív rekurzív szekvenciafüggvények hierarchiája" . RAIRO - Informatique Théorique - Elméleti informatika . 13 (1): 49–67. doi : 10.1051/ita/1979130100491 .
- Fachini, Emanuela; Maggiolo-Schettini, Andrea (1982). "Primitív rekurzív szekvenciafüggvények hierarchiáinak összehasonlítása". Zeitschrift für mathematische Logik und Grundlagen der Mathematik . 28 (27–32): 431–445. doi : 10.1002/malq.19820282705 .
- Goetze, Bernhard; Nehrlich, Werner (1980). "A hurokprogramok és a szubrekurzív hierarchiák felépítése" . Zeitschrift für mathematische Logik und Grundlagen der Mathematik . 26 (14–18): 255–278. doi : 10.1002/malq.19800261407 .
- Ibarra, Oscar H .; Leininger, Brian S. (1981). "Presburger függvények jellemzése". SIAM Journal on Computing . 10 (1): 22–39. doi : 10.1137/0210003 .
- Ibarra, Oscar H .; Rosier, Louis E. (1983). "Egyszerű programozási nyelvek és a Turing -gépek korlátozott osztályai" . Elméleti számítástechnika . 26 (1–2): 197–220. doi : 10.1016/0304-3975 (83) 90085-3 .
- Kfoury, AJ; Moll, Robert N .; Arbib, Michael A. (1982). A számítástechnika programozási megközelítése . Springer, New York, NY. doi : 10.1007/978-1-4612-5749-3 . ISBN 978-1-4612-5751-6.
- Machtey, Michael (1972). "Kiterjesztett ciklusnyelvek és számítható függvényosztályok" . Journal of Computer and System Sciences . 6 (6): 603–624. doi : 10.1016/S0022-0000 (72) 80032-1 .
- PlanetMath. "primitív rekurzív vektor-értékű függvény" . Letöltve 2021-08-21 .
- Matos, Armando B. (2014-11-03). "A primitív rekurzív függvények zárt formája: az imperatív programoktól a matematikai kifejezéseken át a funkcionális programokig" (PDF) . Letöltve 2021-08-20 .
- Matos, Armando B. (2015). "A primitív rekurzív funkciók hatékonysága: A programozó nézete" . Elméleti számítástechnika . 594 : 65–81. doi : 10.1016/j.tcs.2015.04.022 .
- Meyer, Albert R .; Ritchie, Dennis MacAlistair (1967). A ciklusprogramok összetettsége . ACM '67: Az 1967 -es 22. országos konferencia előadásai. doi : 10.1145/800196.806014 .
- Minsky, Marvin Lee (1967). Számítás: véges és végtelen gépek . Prentice Hall. doi : 10.1017/S0008439500029350 .
- Ritchie, Dennis MacAlistair (1967). Programszerkezet és számítási komplexitás (vázlat) (PDF) .
- Ritchie, Robert Wells (1965. november). "Rekurzív függvények osztályai Ackermann függvénye alapján" . Pacific Journal of Mathematics . 15 (3): 1027–1044. doi : 10.2140/pjm.1965.15.1027 .
- Schöning, Uwe (2001). Theoretische Informatik-kurz gefasst (4 szerk.). London: Oxford University Press. ISBN 3-8274-1099-1.
- Schöning, Uwe (2008). Theoretische Informatik-kurz gefasst (5 szerk.). London: Oxford University Press. ISBN 978-3-8274-1824-1. DNB 986529222 .
- Tsichritzis, Dennis C (1970). "Az egyszerű programok egyenértékűségi problémája". Az ACM folyóirata . 17 (4): 729-738. doi : 10.1145/321607.321621 .
- Tsichritzis, Dennis C (1971). "Megjegyzés a szubrekurzív hierarchiák összehasonlításáról". Információfeldolgozó levelek . 1 (2): 42–44. doi : 10.1016/0020-0190 (71) 90002-0 .