Skip to content

Latest commit

 

History

History
55 lines (39 loc) · 3.67 KB

File metadata and controls

55 lines (39 loc) · 3.67 KB

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

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

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

1. Интерпретатор лямбд/miniML на макс. D

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

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

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

2. Навороты сверху для A-C

Будут выдаваться разные командам из двух человек. Ожидается, что напарники будут понимать код, напиманный другим.

Включает в себя расширения miniML:

  • тайпчекер
  • bool и операции с ними
  • n-ки
  • более крупные расширения (1 штука на пару студентов, без повторений)
    • алгебраические типы данных
    • explicit polymorphism для recordoв:
      • `type 'b r = { func : 'a . ('a -> b') -> 'b }
    • буду дописывать при появлении желающих

Если у кого-то курсач (учебная практика) про ФП, то по согласовании с научником, можно попробовать его засчитать этому человеку как допуск выше D.