Início Tecnologia Quais programadores funcionais podem aprender com o cálculo seqüente

Quais programadores funcionais podem aprender com o cálculo seqüente

5
0

 

  1. Introdução
  2. Traduzindo -se ao cálculo seqüente

    2.1 Expressões aritméticas

    2.2 Deixe as ligações

    2.3 Definições de nível superior

    2.4 Dados algébricos e tipos de codata

    2.5 Funções de primeira classe

    2.6 Operadores de controle

  3. Avaliação dentro de um contexto

    3.1 Contextos de avaliação para diversão

    3.2 foco na avaliação no núcleo

  4. Regras de digitação

    4.1 Regras de digitação para diversão

    4.2 Regras de digitação para núcleo

    4.3 Tipo de solidez

  5. Percepções

    5.1 Os contextos de avaliação são de primeira classe

    5.2 Os dados são duplos para codata

    5.3 Letrações são duplas para controlar os operadores

    5.4 A transformação de caso de caso

    5.5 Consumidores diretos e indiretos

    5.6 Callg-By-Value, Call-By-Name e Eta-Laws

    5.7 Lógica linear e a dualidade de exceções

  6. Trabalho relacionado
  7. Conclusão, declaração de disponibilidade de dados e reconhecimentos

A. A relação com o cálculo seqüente

B. Regras de digitação para diversão

C. Semântica operacional da etiqueta/goto

Referências

5 insights

Na seção anterior, explicamos o que é o cálculo e como funciona. Agora que sabemos o quê e como podemos explicar por que esse cálculo é tão interessante. Esta seção é, portanto, uma pequena coleção de idéias independentes. Para ficar claro, essas idéias são óbvias para aqueles que estão profundamente familiarizados com o cálculo, mas ainda podemos lembrar o quão surpreendente eles eram para nós quando aprendemos sobre eles.

5.1 Os contextos de avaliação são de primeira classe

Uma característica central do 𝜆𝜇𝜇 𝜆𝜇𝜇 cálculo é o tratamento dos contextos de avaliação como objetos de primeira classe, como mencionamos antes. Por exemplo, considere o termo (⌜2⌝ ∗ ⌜3⌝) ∗ ⌜4⌝ na diversão. Quando queremos avaliar isso, precisamos usar o contexto de avaliação □ ∗ ⌜4⌝ para avaliar o subtermão (⌜2⌝ ∗ ⌜3⌝) e obter ⌜6⌝ ∗ ⌜4⌝, que podemos avaliar para ⌜24⌝. Traduzir esse termo para o núcleo fornece 𝜇𝛼. ∗ (𝜇𝛽. ∗ (⌜2⌝, ⌜3⌝; 𝛽), ⌜4⌝; 𝛼). Para avaliar este termo, primeiro precisamos focá -lo dando

𝜇𝛼.⟨𝜇𝛽. ∗ (⌜2⌝, ⌜3⌝; 𝛽) | 𝜇𝑥. ˜ ∗ (𝑥, ⌜4⌝; 𝛼)⟩

Quando começamos a avaliar com ⋆, as etapas são as mesmas da diversão. Usando o valor de chamada por valor, a 𝜇-abstração é avaliada primeiro, dando ∗ (⌜2⌝, ⌜3⌝; ∗ (𝜇𝑥. ˜ ∗ ∗ (𝑥, ⌜4⌝; ⋆)). Agora, tem a forma em que o produto pode ser avaliado para ⟨⌜6⌝ | 𝜇𝑥. ∗ (⌜6⌝, ⌜4⌝; ⋆) pode então ser avaliado diretamente em ⌜24⌝.

Após o foco, podemos ver como 𝛽 é uma variável que representa o contexto de avaliação em diversão. O termo 𝜇𝑥. ˜ ∗ (𝑥, ⌜4⌝; 𝛼) é a representação de primeira classe do contexto de avaliação □ ∗ ⌜4⌝. Primeiro, avaliamos a subexpressão ∗ (⌜2⌝, ⌜3⌝; 𝛽) e depois inserimos o resultado em ∗ (𝑥, ⌜4⌝; ⋆) para terminar a avaliação, como fizemos em diversão. Em outras palavras, o □ de um contexto de avaliação em diversão corresponde a uma continuação 𝛽 no núcleo e determina da mesma forma que as subexpressões de ordem são avaliadas.

5.2 Os dados são duplos para codata

O cálculo seqüente esclarece a relação entre dados e codata como sendo exatamente dupla entre si. Ao analisar as regras de digitação na Figura 2, podemos ver que os tipos de dados e codata são completamente simétricos. Os dois não são simétricos nos idiomas baseados na dedução natural: uma correspondência de padrão nos tipos de dados inclui o Scrutinee, mas não há objeto correspondente na construção de codata. Da mesma forma, invocar um destruidor 𝐷 de um tipo codata sempre inclui o objeto Codata 𝑥 a ser destruído, por exemplo, 𝑥.𝐷 (…), enquanto a invocação do construtor de um tipo de dados não possui um objeto correspondente.

Essa assimetria é fixada no cálculo seqüente. Os destruidores (como o FST) são de primeira classe e não exigem um Scrutinee, que repara a simetria aos construtores. Da mesma forma, as correspondências do padrão (caso {…}) não requerem um objeto para destruir, o que os torna completamente simétricos para copatern correspondentes. Essa dualidade reduz a complexidade conceitual e abre a porta em direção ao design compartilhado e implementação de recursos de dados e tipos de codata.

Autores:

(1) David Binder, Universidade de Tübingen, Alemanha;

(2) Marco Tzschentke, Universidade de Tübingen, Alemanha;

(3) Marius Muller, Universidade de Tübingen, Alemanha;

(4) Klaus Ostermann, Universidade de Tübingen, Alemanha.


fonte