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.