Tabela de links
- Introdução
- 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
- Avaliação dentro de um contexto
3.1 Contextos de avaliação para diversão
3.2 foco na avaliação no núcleo
- 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
- 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
- Trabalho relacionado
- 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.