Создайте директорию (на основе Lambda) со своей фамилией и там пишите
| Макс оценка | Название | |
|---|---|---|
| D | Интерпретатор miniML | |
| A-C | Продвинутый интерпретатор |
Задача на одинаковая каждому, сдавать понимание кода надо очно пулу принимающих.
Нужно реализовать интерпретатор miniML с лямбдами и арифметикой.
- Рекурсивные функции (с fix и с let rec), CBV
- Целые числа и операции над ними; считаем, что if ожидает целочисленное условие, что будет true, а что false --- выберите сами
- Тайпчекер не надо
- В идеале какой-нибудь сахар для функций:
fun x y -> ...вместоfun x -> fun y -> ... - списки и энки будут на оценку выше D, т.е. не надо.
- Стандартные функции, чтобы печатать числа в ответе и по ходу дела. Полноценные строки --- не надо.
- Интерпретатор не должен падать, используйте монады для обработки ошибок.
- Тестирование
- Парсера и принтера программ через QuickCheck
- Самого интерпретатора через cram тесты. Как минимум интерпретатор должен быть способен вычислять факториалы и числа Фибоначчи.
- Учет максимального количества шагов интерпретатора, чтобы тестировать зависающие программы.
Будут выдаваться разные командам из двух человек. Ожидается, что напарники будут понимать код, напиманный другим.
Включает в себя расширения miniML:
- тайпчекер
- bool и операции с ними
- n-ки
- более крупные расширения (1 штука на пару студентов, без повторений)
- алгебраические типы данных
- explicit polymorphism для recordoв:
- `type 'b r = { func : 'a . ('a -> b') -> 'b }
- буду дописывать при появлении желающих
Если у кого-то курсач (учебная практика) про ФП, то по согласовании с научником, можно попробовать его засчитать этому человеку как допуск выше D.