Главная страница « Информация « 4 курс «

Курс «Введение в функциональное программирование»


Лектор: доц. кафедры СП, канд. физ.-мат. наук Малышко Виктор Васильевич
Продолжительность: 36 часов лекции, 36 часов семинары, 72 часа самостоятельная работа.
Аудитория: С осени 2014 года курс читается для 427 и 428 групп. С осени 2015 года курс предлагается по выбору для аспирантов. Осенью 2015 из-за исключительной ситуации курс читался также для 420 и 421 групп.
Формы отчётности: экзамен.
Автор программы: канд. физ.-мат. наук Малышко В. В.
Программа составлена по материалам канд. физ.-мат. наук Чернова А. В.
Группа Вконтакте: vk.com/sp_scheme [html].
Табличка с баллами: https://goo.gl/7MquQF [Гугль-диск]

Оглавление


Новости
Практические задания
Материалы по курсу

Новости


• 13 января в 9-00 в 523 пройдёт написание итоговой контрольной работы. Во время него нельзя пользоваться электроникой, собственной чистой бумагой, карандашом. Можно пользоваться своими распечатками и записями, выданной бумагой для выполнения работы. Вся выданная бумага будет собрана. Выход из аудитории будет возможен только после окончательной сдачи работы. Начальник курса указал, что ведомость следует закрыть в субботу 14 января. Показ работ пройдёт в субботу в 14-30 в 723. По окончании его будет дана возможность для сдачи практических заданий. Разумно воспользуйтесь ей.

• На зачётной декаде возможности по сдаче практических заданий таковы: среда 21 декабря 10.00-14.30 в 515; вторник 27 декабря 14.30-18.00 в 758. Во вторник 20 декабря действует обычное расписание семестра, так что пары в 515 остаются в силе.

• В текст задания "Весна" [html] добавлен заключительный абзац с требованиями по сдаче.

• В документы группы добавлен пример варианта контрольной прошлых лет. Помимо него при подготовке можно использовать упражнения из книги SICP и с сайта одноимённого курса в MIT. Если Вы не пользуетесь ВК, Вы можете запросить материалы через e-mail   .

• Рекомендации, на которые следует обратить внимание для получения полного балла по «Доктору»:
1) В упражнении 2 следует переписать many-replace, реализовав корректный алгоритм.
2) В упражнении 3 (стр. 5 методички) на самом деле имеется в виду, что при построении ответной реплики фраза пользователя, взятая из истории, подвергается тому же преобразованию, что и в упражнении 2, только вместо результата qualifier к фразе приписывается префикс "earlier you said that". Например, если из истории выбрана реплика (you are not being very helpful to me), то по ней будет построен ответ (earlier you said that i am not being very helpful to you).
3) В упражнении 5 следует использовать гибкую структуру (со *) и пополнить набор ключевых слов и ответов. При построении ответа по ключевому слову следует учитывать следующие возможные ситуации (они не исключают друг друга): 1) во фразе пользователя могут содержаться несколько ключевых слов из одной и той же или из разных групп; 2) во фразе пользователя может повторяться ключевое слово; 3) одно и то же ключевое слово может входить в разные группы. Следует реализовать способ построения, основанный на случайности, и не являющийся тривиальным (таким как: всегда выбирать первое встретившееся ключевое слово).
4) В упражнении 6 следует переписать reply, добавив ему параметр -- список стратегий построения реплики, в этом списке для каждой стратегии есть предикат -- функция, определяющая применима ли стратегия, тело -- функция, строящая ответ, вес -- число, помогающее выбрать одну стратегию из нескольких применимых. Reply проверяет предикаты всех стратегий, составляет список применимых, случайно с учётом веса выбирает одну стратегию из этого списка, запускает её тело. Все стратегии ответов, имеющиеся в программе должны быть представлены в списке. Каких-либо способов построения ответов вне списка стратегий быть не должно.
5) При сдаче программы будьте готовы ответить на вопросы по коду, а также по материалам лекций. Например, какой процесс порождает та или иная функция: итеративный или рекурсивный. И т. п.

• Табличка с баллами и распределением вариантов: [Гугль-диск].

• Осенью 2016 года лекции проводятся по понедельникам в нечётные недели на 4-й паре в аудитории 612, в чётные недели на 5-й паре в аудитории 524. Лекции читаются с 5 сентября. Неделя с 14 ноября -- четная, с 21 ноября -- нечётная. Семинары проводятся по вторникам на 4-й и 5-й паре в 515-й, начиная с 13 сентября.

Практические задания


• На семинарах будет осуществляться приём заданий у студентов и возможно будут проводиться письменные контрольные работы, о которых будет отдельно объявлено. Предлагается выполнить два задания. Осенью 2016 года для программирования используется среда Dr. Racket.

• Первое задание общее для всех -- «Доктор». Методичка по «Доктору» доступна онлайн [pdf].

Упражнения по «Доктору» делятся на 4 блока, три из которых обязательные:
1-й блок -- упражнения с 1 по 3. Максимальный балл -- 5. Сдача без штрафа до 27 сентября.
2-й блок -- упражнения 4 и 5. Максимальный балл -- 7. Сдача без штрафа до 27 сентября.
3-й блок -- упражнение 6. Максимальный балл -- 8. Сдача без штрафа до 27 сентября.
4-й блок(творческий, по выбору) -- упражнение 7. Максимальный балл -- 15. Сдача до 1 ноября.

Задание «Генетическое программирование» сдаётся в 3 этапа:
1-й этап -- создание тестов -- до 15 ноября
2-й этап -- разработка программы -- 6 декабря
3-й этап -- составление отчёта -- до 19 декабря

Приём заданий в 427 и 428 группах помимо лектора ведёт аспирант Колганов Александр Сергеевич.
После сдачи любого из блоков "Доктора" следует прислать код лектору. Если код не прислан в течение 7 дней после сдачи в 515й, то либо начинают начисляться штрафы (столько сколько будет сочтено нужным), либо по заданию аннулируются плюсы в табличке.
До начала ноября упражнения по «Доктору» должны быть выполнены. Программы 1-3 блоков следует составлять на версии языка scheme/base (начинайте свой код с директивы #lang scheme/base). В них использование мутаторов (присваиваний и т. п.), мутируемых структур данных Racket, запрещено. Полученная в ходе выполнения упражнений программа должна быть сдана в компьютерном классе. При переходе от начальных упражнений к последующим код следует дописывать так, чтобы функциональность программы расширялась (то, что было раньше, не портить). По истечении контрольных сроков за каждую неделю просрочки начисляется штраф в размере 1/4 от максимального балла. При большой просрочке за сдачу баллы зачисляться не будут, тем не менее все блоки должны быть сданы.

• Не следует начинать сдачу в конце установленного срока, рассчитывая, что первая попытка будет удачной. Рекомендуется сдавать упражнения блоками. Датой сдачи блока считается дата последнего сданного упражнения из блока, при условии что код прислан вовремя. При сдаче упражнений будьте готовы ответить на вопросы по своей программе.

• 4-й блок -- упражнение по выбору. Либо Вы дополняете "Доктора" стратегией "Весна" [html], либо придумываете самостоятельно оригинальную нетривиальную стратегию ответа и реализуете её. Стратегия "Весна" описана отдельно по ссылке выше. Решения с самостоятельно придуманными стратегиями будут собраны, проверены и ранжированы с учётом оригинальности идеи, трудоёмкости реализациии и т. п.. Затем они будут оценены, исходя из максимума и контрольного срока, указанных для этого блока выше.

• Второе задание индивидуально. Оно посвящено генетическому программированию. Требования при сдаче упражнений 2-го задания («Генетическое программирование»), критерии оценки и варианты опубликованы отдельно: [html]. Сдавать 2-е задание можно лишь по окончании сдачи «Доктора». При выполнении второго задания в качестве подспорья рекомендуется пособие [pdf].

• До окончания семестра необходимо сдать все задания, даже если сроки сдачи по ним прошли. Со стороны преподавателей будут приложены все усилия к тому, чтобы положительную оценку по экзамену получили только те студенты, которые сдадут все практические задания.

Материалы по курсу


• Слайды лекций (выкладываемые по мере чтения) и другие материалы ищите в ВК-группе. Если Вы испытываете затруднения с доступом в группу, запросите материалы по e-mail    у лектора. Все предоставленные материалы (в том числе задания анкет/контрольных/итоговых работ) должны быть использованы только лично Вами для учёбы во время изучения курса. Пожалуйста, не распространяйте их как-либо и где-либо.

Предупреждение


Размещение на других ресурсах, а также коммерческое использование материалов, опубликованных в данном разделе, возможно только с разрешения авторов. По всем вопросам пишите:   

  

© Кафедра системного программирования ВМК МГУ.

Обновлено: 12.1.2017