Skip to content

Latest commit

 

History

History
35 lines (28 loc) · 3.06 KB

File metadata and controls

35 lines (28 loc) · 3.06 KB

Темы задач на самостоятельную работу

Создайте директорию (на основе Lambda) со своей фамилией и там пишите

Макс оценка Название
D Интерпретатор miniML
A-C Продвинутый интерпретатор

Интерпретатор miniML на макс. D

Задача на одинаковая каждому, сдавать понимание кода надо очно пулу принимающих.

Нужно реализовать интерпретатор miniML с лямбдами и арифметикой.

  • Рекурсивные функции (с fix и с let rec), CBV. Идентификаторы как в OCaml
  • Целые числа и операции над ними; считаем, что if ожидает целочисленное условие, что будет true, а что false --- выберите сами
  • Не нужно
    • Тайпчекер
    • списки и энки будут на оценку выше
    • строки
  • В идеале какой-нибудь сахар для функций: fun x y -> ... вместо fun x -> fun y -> ...
  • Стандартная функция, чтобы печатать числа в ответе и по ходу дела.
  • Интерпретатор не должен падать, используйте монады для обработки ошибок.
  • Интерпретатор можно реализовывать рекурсивно, либо с помощью компиляции в абстарктную машину.
    • Для рекурсивного интерпретатора не нужно делать разделения на рекурсивные и нерекурсивные замыкания.
  • Тестирование
    • Парсера и принтера программ через QuickCheck
    • Самого интерпретатора через cram тесты. Как минимум интерпретатор должен быть способен вычислять факториалы и числа Фибоначчи, с let rec и с комбинатором неподвижной точки для стратегии CBV.
    • Учет максимального количества шагов интерпретатора, чтобы тестировать зависающие программы.
    • Человек должен быть способен объявлять свои функции с такими же именами (например, print или fix), как встроенные.
    • Некорректные программы не должны работать
      • например, если опущен пробел между let и rec, то это перестает быть двумя ключевыми словами, а становится идентификатором.