Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
A Redex (skratka pre redukovateľnú expresiu ) je súčasťou výrazu v programovacom jazyku, ktorý môže byť zjednodušený alebo znížené Podľa pravidiel hodnotenia jazykov . Predstavte si to ako na sub-expresiu, ktorá je „zrelá“ na výpočet.
V podstate je redex kus kódu, kde sa môže stať ďalší výpočtový krok.
Ako sa týka hodnotenia:
Vyhodnotenie expresie zahŕňa opakovane identifikáciu a znižovanie redexov, až kým nebude expresia v „normálnej forme“ - stav, v ktorom nie sú možné žiadne ďalšie zníženia. Táto normálna forma predstavuje konečný výsledok výrazu.
Tu je rozdelenie spojenia:
1. Identifikujte redex: Proces hodnotenia sa začína skenovaním výrazu, aby sa našla sub-expresia, ktorá zodpovedá známemu pravidlu redukcie. Toto je RedEx.
2. Znížte RedEx: RedEx sa potom „zníži“ alebo „prepísaný“ pomocou zodpovedajúceho pravidla redukcie. Zvyčajne to zahŕňa výmenu RedEx jednoduchším výrazom.
3. Opakujte: Proces sa opakuje. Nová expresia (po redukcii) sa kontroluje na ďalšom RedEx. Toto pokračuje, až kým sa nenájdete žiadne redexy.
4. Normálna forma: Konečný výraz, ktorý neobsahuje žiadne redexy, sa považuje za výsledok hodnotenia. Je to „hodnota“ pôvodného výrazu.
Príklady na ilustráciu:
1. Lambda Calculus (jednoduchý model výpočtu):
* výraz: "(λx. x + 1) 5" (to predstavuje funkciu, ktorá pridáva 1 k svojmu argumentu, použité na hodnotu 5)
* RedEx: `(λx. X + 1) 5` je RedEx. Je to aplikácia funkcie Lambda na argument.
* RECONTION PRURY: Pravidlo redukcie beta (nahradenie argumentu pre parameter vo funkčnom tele).
* Redukcia: `(λx. X + 1) 5` sa redukuje na` 5 + 1`
* Next RedEx: `5 + 1`
* RECONTION PRURY: Pridanie.
* Redukcia: `5 + 1` sa redukuje na` 6`
* Normálna forma: `6` (žiadne ďalšie redexy. Toto je konečný výsledok.)
2. Aritmetický výraz:
* výraz: `(2 + 3) * 4`
* Redex (v prísnom poradí hodnotenia, ako vo väčšine jazykov): `2 + 3`
* RECONTION PRURY: Pridanie.
* Redukcia: `(2 + 3) * 4` Zníži sa na` 5 * 4`
* Next RedEx: `5 * 4`
* RECONTION PRURY: Násobenie.
* Redukcia: `5 * 4` sa redukuje na` 20`
* Normálna forma: `20"
3. Podmienené vyhlásenie (v hypotetickom jazyku):
* výraz: `Ak je to pravda, potom 10 else 20`
* RedEx: `Ak je to pravda, potom 10 else 20`
* RECONTION PRURY: Ak je podmienka pravdivá, vymeňte celý výraz vetvou „potom“.
* Redukcia: `Ak je to pravda, potom 10 Else 20` sa zníži na` 10 "
* Normálna forma: `10"
Kľúčové koncepty týkajúce sa Redexes:
* Stratégia hodnotenia: Poradie, v ktorom sú vybrané redexy na zníženie, ovplyvňuje proces hodnotenia. Bežné stratégie zahŕňajú:
* Appany Order (Eager Hodnotenie): Zhodnoťte argumenty na funkciu * pred * Aplikáciou samotnej funkcie. Toto sa často realizuje s prísnym hodnotením (rovnako ako mnoho imperatívnych jazykov ako Java, C ++, Python).
* Normálne poradie (lenivé hodnotenie): Vyhodnoťte argumenty na funkciu * iba vtedy, keď sú ich hodnoty skutočne potrebné. Používa sa v čisto funkčných jazykoch ako Haskell.
* Call-By-Name: Nahnaký argument nahrádzajte priamo do funkčného tela.
* call-by-hodnota: Vyhodnoťte argument a odovzdajte jeho hodnotu funkcii. Podobné ako v prípade uplatňovania.
* call-by-Need: Podobne ako v prípade názvu volania, ale spomína výsledok prvého hodnotenia, aby následné použitie argumentu nevyžadovalo prehodnotenie. Haskell to používa.
* Confluence: Žiaducou vlastnosťou redukčného systému je to, že bez ohľadu na poradie, v ktorom sa redexy znížia, bude konečná normálna forma (ak existuje) rovnaká. Toto je známe ako veta cirkvi-Rosser a platí pre Lambda Calculus a mnoho ďalších formálnych systémov.
Prečo sú redexy dôležité?
* Formálna sémantika: Redexy a Redukčné pravidlá poskytujú presný a formálny spôsob definovania sémantiky (význam) programovacieho jazyka.
* Optimalizácia kompilátora: Kompilátory môžu použiť identifikáciu a zníženie RedEx na optimalizáciu kódu. Napríklad konštantné skladanie (hodnotenie konštantných výrazov v čase kompilácie) je forma redukcie RedEx.
* Teoretické porozumenie: Redexes sú základom porozumenia, ako výpočet funguje na veľmi základnej úrovni. Sú základným kameňom mnohých konceptov teórie programovacieho jazyka.
* Rovnomerné zdôvodnenie: Zdôvodnenie správnosti programu pomocou pravidiel redukcie na transformáciu kódu na ekvivalentné formuláre.
Stručne povedané, koncepcia RedEx je ústredným prvkom pochopenia toho, ako sa výrazy hodnotia v programovacích jazykoch. Poskytuje rámec na definovanie, implementáciu a zdôvodnenie výpočtu. Opakovaným nájdením a znížením redexov môžeme určiť konečný výsledok výrazu.