Что функциональные программисты могут извлечь уроки из последующего исчисления

Что функциональные программисты могут извлечь уроки из последующего исчисления

8 июля 2025 г.
  1. Введение

  2. Перевод на последовательное исчисление

    2.1 Арифметические выражения

    2.2 Пусть привязки

    2.3 Определения верхнего уровня

    2.4 Алгебраические данные и типы кодов

    2.5 первоклассные функции

    2.6 Операторы управления

  3. Оценка в контексте

    3.1 Контексты оценки для развлечения

    3.2 Сосредоточение внимания на оценке в сердечнике

  4. Правила печати

    4.1 Правила печати для развлечения

    4.2 Правила печати для Core

    4.3 Тип. Звукость

  5. Понимание

    5.1 Контексты оценки являются первым классом

    5.2 Данные двойные до кодата

    5.3 LET-связы

    5.4 Трансформация случая

    5.5 Прямой и косвенный потребители

    5.6 Позвоните в запас, вызовов и eta-laws

    5.7 Линейная логика и двойственность исключений

  6. Связанная работа

  7. Заключение, заявление о доступности данных и подтверждение

A. Взаимосвязь с последовательным исчислением

B. Правила набора развлечений

C. Оперативная семантика лейбла/goto

Ссылки

5 Insights

В предыдущем разделе мы объяснили, что такое Calculus и как это работает. Теперь, когда мы знаем, что и как мы можем объяснить, почему это исчисление так интересно. Поэтому этот раздел представляет собой небольшую коллекцию независимых пониманий. Чтобы быть ясным, эти идеи очевидны для тех, кто глубоко знаком с 𝜆𝜇𝜇 𝜆𝜇𝜇-calculus, но мы все еще можем вспомнить, насколько они удивительны для нас, когда мы впервые узнали о них.

5.1 Контексты оценки являются первым классом

Центральной особенностью 𝜆𝜇𝜇 𝜆𝜇𝜇-calculus является лечение контекстов оценки в качестве первоклассных объектов, как мы упоминали ранее. Например, рассмотрим термин (⌜2⌝ ∗ ⌜3⌝) ∗ ⌜4⌝ в веселье. Когда мы хотим оценить это, мы должны использовать контекст оценки □ ∗ ⌜4⌝, чтобы оценить подходящий (⌜2⌝ ∗ ⌜3⌝) и получить ⌜6⌝ ∗ ⌜4⌝, который мы можем затем оценить до ⌜24⌝. Перевод этого термина в ядро ​​дает 𝜇𝛼. ∗ (𝜇𝛽. ∗ (⌜2⌝, ⌜3⌝; 𝛽), ⌜4⌝; 𝛼). Чтобы оценить этот термин, нам сначала нужно сосредоточить его, давая

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

Когда мы теперь начинаем оценивать с ⋆, шаги такие же, как и в веселье. Используя вызовов, 𝜇-восклинение оценивается в первую очередь, давая ∗ (⌜2⌝, ⌜3⌝; ∗ (𝜇𝑥. ∗ (⌜6⌝, ⌜4⌝; ⋆) может затем быть непосредственно оцениваться до ⌜24⌝.

После фокусировки мы видим, как 𝛽 является переменной, которая означает контекст оценки в веселье. Термин 𝜇𝑥. ˜ ∗ (𝑥, ⌜4⌝; 𝛼) является первоклассным представлением контекста оценки □ ∗ ⌜4⌝. Сначала мы оцениваем субэкспрессию ∗ (⌜2⌝, ⌜3⌝; 𝛽), а затем вставляем результат в ∗ (𝑥, ⌜4⌝; ⋆), чтобы закончить оценку, как мы делали в веселье. Другими словами, □ из контекста оценки в веселье соответствует продолжению 𝛽 в ядре и аналогичным образом определяет, в каких порядок порядок оцениваются.

5.2 Данные двойные до кодата

Последовательное исчисление проясняет связь между данными и кодатами как точно двойное друг к другу. При рассмотрении правил печати на рисунке 2 мы видим, что данные и типы кодат являются полностью симметричными. Эти два не являются симметричными на языках на основе естественного вычета: соответствие шаблона по типам данных включает в себя проверку, но нет соответствующего объекта в построении кодат. Точно так же вызов деструктора 𝐷 типа кодата всегда включает в себя объект Codata 𝑥, который должен быть разрушен, например, 𝑥.𝐷 (...), тогда как вызов конструктора типа данных не имеет соответствующего объекта.

Эта асимметрия зафиксирована в последовательном исчислении. Десрукторы (такие как FST) являются первоклассным и не требуют проверки, который ремонтирует симметрию конструктору. Точно так же шаблон совпадает (case {. ...}) не требует объекта для разрушения, что делает их совершенно симметричными для совпадений Copattern. Эта двойственность уменьшает концептуальную сложность и открывает дверь в направлении общего дизайна и реализации функций данных и типов кода.

Авторы:

(1) Дэвид Биндер, Университет Тюбингена, Германия;

(2) Марко Цшенке, Университет Тюбингена, Германия;

(3) Мариус Мюллер, Университет Тюбингена, Германия;

(4) Клаус Остерманн, Университет Тюбингена, Германия.


Эта статья естьДоступно на Arxivпод CC по 4,0 лицензии.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE