|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Computer Programspråk >> Content

    Vad är Redex och hur relaterar det till utvärderingen av uttryck på programmeringsspråk?

    redex:Nyckeln till uttrycksutvärdering

    A redex (Kort för reducerbart uttryck ) är en del av ett uttryck på ett programmeringsspråk som kan förenklas eller reducerat Enligt språkets utvärderingsregler . Tänk på det som ett underuttryck som är "mogen" för beräkning.

    I huvudsak är en Redex den kodstycke där nästa beräkningssteg kan hända.

    Hur det hänför sig till utvärdering:

    Utvärdering av ett uttryck innebär att upprepade gånger identifierar och minskar REDEXES tills uttrycket är i en "normal form" - ett tillstånd där inga ytterligare minskningar är möjliga. Denna normala form representerar det slutliga resultatet av uttrycket.

    Här är en uppdelning av anslutningen:

    1. Identifiera Redex: Utvärderingsprocessen börjar med att skanna uttrycket för att hitta ett underuttryck som matchar en känd reduktionsregel. Detta är Redex.

    2. Minska Redex: Redex "reduceras sedan" eller "omskriven" med motsvarande reduktionsregel. Detta innebär vanligtvis att ersätta Redex med ett enklare uttryck.

    3. Upprepa: Processen upprepas. Det nya uttrycket (efter minskningen) kontrolleras för en annan redex. Detta fortsätter tills inga fler redexer kan hittas.

    4. Normal form: Det slutliga uttrycket, som inte innehåller några Redexes, anses vara resultatet av utvärderingen. Det är "värdet" för det ursprungliga uttrycket.

    Exempel för att illustrera:

    1. Lambda Calculus (en enkel beräkningsmodell):

    * Uttryck: `(λx. X + 1) 5 '(detta representerar en funktion som lägger till 1 till dess argument, tillämpas på värdet 5)

    * redex: `` (λx. X + 1) 5 'själv är Redex. Det är en tillämpning av en lambda -funktion på ett argument.

    * reduktionsregel: Beta-reduktionsregeln (ersätter argumentet med parametern i funktionskroppen).

    * reduktion: `(λx. X + 1) 5` minskar till` 5 + 1`

    * Next Redex: `5 + 1`

    * reduktionsregel: Tillägg.

    * reduktion: `5 + 1` minskar till` 6`

    * Normal form: `6 '(inga fler redexer. Detta är det slutliga resultatet.)

    2. Aritmetiskt uttryck:

    * Uttryck: `(2 + 3) * 4`

    * redex (under en strikt utvärderingsordning, som på de flesta språk): `2 + 3`

    * reduktionsregel: Tillägg.

    * reduktion: `(2 + 3) * 4` minskar till` 5 * 4`

    * Next Redex: `5 * 4`

    * reduktionsregel: Multiplikation.

    * reduktion: `5 * 4` minskar till` 20`

    * Normal form: `20`

    3. Villkorat uttalande (på ett hypotetiskt språk):

    * Uttryck: `Om sant är 10 annars 20`

    * redex: `Om sant är 10 annars 20`

    * reduktionsregel: Om villkoret är sant, byt ut hela uttrycket med "då" grenen.

    * reduktion: `Om sant, minskar 10 annars 20 'till` 10`

    * Normal form: `10`

    Nyckelkoncept relaterade till REDEXES:

    * Utvärderingsstrategi: Ordningen i vilken omexer väljs för minskning påverkar utvärderingsprocessen. Vanliga strategier inkluderar:

    * Applicative Order (ivrig utvärdering): Utvärdera argumenten till en funktion * innan * tillämpa själva funktionen. Detta implementeras ofta med strikt utvärdering (som många nödvändiga språk som Java, C ++, Python).

    * Normal ordning (lat utvärdering): Utvärdera argumenten till en funktion * endast när * deras värden faktiskt behövs. Detta används på rent funktionella språk som Haskell.

    * call-by-name: Ersätt det oundvikliga argumentet direkt i funktionsorganet.

    * call-by-värde: Utvärdera argumentet och överföra dess värde till funktionen. Liknar tillämplig ordning.

    * call-by-behov: Liknar call-by-name, men memoiserar resultatet av den första utvärderingen så att efterföljande användningar av argumentet inte kräver omvärdering. Haskell använder detta.

    * Confluence: En önskvärd egenskap hos ett reduktionssystem är att, oavsett ordning i vilken Redexs reduceras, kommer den slutliga normala formen (om den finns) att vara densamma. Detta kallas Church-Rosser Theorem, och det gäller för Lambda Calculus och många andra formella system.

    Varför är Redexs viktiga?

    * Formell semantik: Redexes och minskningsregler ger ett exakt och formellt sätt att definiera semantiken (betydelsen) av ett programmeringsspråk.

    * Compiler Optimization: Kompilatorer kan använda REDEX -identifiering och reduktion för att optimera koden. Till exempel är konstant vikning (utvärdering av konstant uttryck vid sammanställningstid) en form av redex -reduktion.

    * teoretisk förståelse: Redexes är grundläggande för att förstå hur beräkning fungerar på en mycket grundläggande nivå. De är en hörnsten i många programmering av språkteorikoncept.

    * ekvationell resonemang: Resonemang om programmets korrekthet genom att använda reduktionsregler för att omvandla kod till motsvarande former.

    Sammanfattningsvis är begreppet en Redex centralt för att förstå hur uttryck utvärderas på programmeringsspråk. Det ger en ram för att definiera, implementera och resonera om beräkning. Genom att upprepade gånger hitta och minska Redexes kan vi bestämma det slutliga resultatet av ett uttryck.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur du installerar en SVN Repo
    ·Konvertera Bas 10 till Base 16
    ·Hur man gör ett storyboard för System Design
    ·Hur man skriver Cocoa Apps
    ·Hur man använder en listruta i en HTA
    ·Hur man skriver data Uttalanden
    ·Vilka är de funktioner en transferbuffert
    ·Hur du använder ActiveX-kontroller i ASP Net
    ·Hur manu typer av programmeringsspråk på HTML?
    ·Hur man trycka på knappar i Batch File
    Utvalda artiklarna
    ·Hur att fylla en listvy Från en generisk lista VB.Net
    ·Hur man programmerar med SSL
    ·Datum Skillnad i Java Script
    ·Hur man använder VBA för att skydda ritobjekt
    ·Hur man läser in ingångsvärde i Java
    ·Hur man använder markören för att visa värden i VB
    ·Hur man skriver JDBC Använda Eclipse
    ·Hur man skapar en produktnyckel
    ·Så här visar du ett kommatecken i C + +
    ·C minnesläcka Verktyg
    Copyright © Dator Kunskap https://www.dator.xyz