RedEx:A chave para avaliação da expressão 
   A 
 RedEx  (abreviação de expressão redutível  ) faz parte de uma expressão em uma linguagem de programação que pode ser 
 simplificada  ou 
 reduzido  De acordo com as regras de avaliação 
 do idioma  . Pense nisso como uma sub-expressão que está "madura" para o cálculo.   
 Em essência, um reden é o pedaço de código onde a próxima etapa computacional pode acontecer.     Como se relaciona com a avaliação:   A avaliação de uma expressão envolve identificação e redução repetidamente de redes até que a expressão esteja em uma "forma normal" - um estado em que não são possíveis reduções adicionais. Essa forma normal representa o resultado final da expressão.  
 Aqui está um detalhamento da conexão: 
 1. 
 Identifique o RedEx: O processo de avaliação inicia digitalizando a expressão para encontrar uma sub-expressão que corresponda a uma regra de redução conhecida. Este é o RedEx.  
 2. 
 Reduza o redel: O RedEx é então "reduzido" ou "reescrito" usando a regra de redução correspondente. Isso geralmente envolve a substituição do RedEx por uma expressão mais simples.  
 3. 
 Repita: O processo é repetido. A nova expressão (após a redução) é verificada para outro RedEx. Isso continua até que não sejam mais redefinidos.  
 4. 
 forma normal: A expressão final, que não contém redes, é considerada o resultado da avaliação. É o "valor" da expressão original.   
 Exemplos para ilustrar:    1. Cálculo Lambda (um modelo simples de computação):   * Expressão 
: `(λx. x + 1) 5` (isso representa uma função que adiciona 1 ao seu argumento, aplicado ao valor 5) 
 * 
 RedEx: `(λx. x + 1) 5` em si é o redel. É uma aplicação de uma função lambda a um argumento. 
 * 
 Regra de redução: A regra de redução beta (substituindo o argumento pelo parâmetro no corpo da função). 
 * 
 Redução: `(λx. x + 1) 5` reduz para` 5 + 1` 
 * 
 Próximo RedEx: `5 + 1` 
 * 
 Regra de redução: Adição. 
 * 
 Redução: `5 + 1` reduz para` 6 ' 
 * 
 forma normal: `6` (não há mais redes. Este é o resultado final.)   
 2. Expressão aritmética:   * Expressão 
: `(2 + 3) * 4` 
 * 
 RedEx (sob uma ordem de avaliação estrita, como na maioria dos idiomas): `2 + 3` 
 * 
 Regra de redução: Adição. 
 * 
 Redução: `(2 + 3) * 4` reduz para` 5 * 4` 
 * 
 Próximo RedEx: `5 * 4` 
 * 
 Regra de redução: Multiplicação. 
 * 
 Redução: `5 * 4` reduz para` 20` 
 * 
 forma normal: `20`   
 3. Declaração condicional (em uma linguagem hipotética):   * Expressão 
: `Se for verdade, então 10 else 20` 
 * 
 RedEx: `Se for verdade, então 10 else 20` 
 * 
 Regra de redução: Se a condição for verdadeira, substitua toda a expressão pelo ramo "então". 
 * 
 Redução: `Se for verdade, então 10 else 20 'reduz a` 10' 
 * 
 forma normal: `10`   
 Conceitos -chave relacionados a Redexes:   * 
 Estratégia de avaliação: A ordem em que os redes são escolhidos para redução afeta o processo de avaliação. As estratégias comuns incluem:
 * 
 Ordem de aplicação (avaliação ansiosa): Avalie os argumentos a uma função * antes de * aplicar a própria função. Isso geralmente é implementado com avaliação estrita (como muitos idiomas imperativos, como Java, C ++, Python). 
 * 
 Ordem normal (avaliação preguiçosa): Avalie os argumentos para uma função * somente quando * seus valores são realmente necessários. Isso é usado em linguagens puramente funcionais como o Haskell. 
 * 
 chamado-by-name: Substitua o argumento não avaliado diretamente no corpo da função. 
 * 
 chamada por valor: Avalie o argumento e passe seu valor para a função. Semelhante à ordem aplicativa. 
 * 
 chamado por necessidade: Semelhante ao nome de chamada, mas memoriza o resultado da primeira avaliação, para que os usos subsequentes do argumento não exijam reavaliação. Haskell usa isso.  
 * 
 confluência: Uma propriedade desejável de um sistema de redução é que, independentemente da ordem em que os redes são reduzidos, a forma normal final (se existir) será a mesma. Isso é conhecido como o teorema da igreja e se mantém no Lambda Cálculus e em muitos outros sistemas formais.   
 Por que os RedExes são importantes?    * 
 Semântica formal: Os Redexes e as regras de redução fornecem uma maneira precisa e formal de definir a semântica (significado) de uma linguagem de programação. 
 * 
 otimização do compilador: Os compiladores podem usar a identificação e redução do RedEx para otimizar o código. Por exemplo, o dobramento constante (avaliando expressões constantes no tempo de compilação) é uma forma de redução do RedEx. 
 * 
 Entendimento teórico: Os RedExes são fundamentais para entender como a computação funciona em um nível muito básico. Eles são uma pedra angular de muitos conceitos de teoria da linguagem de programação. 
 * 
 Raciocínio equacional: Raciocínio sobre a correção do programa usando regras de redução para transformar o código em formulários equivalentes.  
 Em resumo, o conceito de um RedEx é central para entender como as expressões são avaliadas nas linguagens de programação. Ele fornece uma estrutura para definir, implementar e raciocinar sobre computação. Ao encontrar e reduzir repetidamente os RedExes, podemos determinar o resultado final de uma expressão.