Понятие o данных.
Понятия программы, алгоритма.
Понятия типа данных, системы типов языка программирования, типизации.
Важнейший парадигмы программирования и их отличительные черты.
Каким образом в язык программирования с динамической типизацией можно ввести новый тип данных? Приведите примеры.
Понятие абстрактного типа данных. Примеры.
Функции (процедуры) высшего порядка в языках программирования высокого уровня.
Способы организации повторяющихся вычислений в языках программирования высокого уровня.
Мемоизация результатов вычислений.
Нестрогие и отложенные вычисления. Примеры.
Способы реализации языка программирования высокого уровня.
Компилятор и интерпретатор: определение, основные функциональные элементы.
Лексический анализатор: назначение, входные данные, выходные данные, принцип реализации.
Синтаксический анализатор: назначение, входные данные, выходные данные.
Формальная грамматика: терминальные символы, нетерминальные символы, правила, аксиома.
БНФ и синтаксические диаграммы.
LL(1)-грамматика: особенности и их использование.
Принцип построения лексического анализатора.
Принцип построения нисходящего синтаксического анализатора, осуществляющего разбор методом рекурсивного спуска.
Основные понятия объектно-ориентированного программирования.
Модульное тестирование (юнит-тестирование), разработка через тестирование.
Способы разбора и вычисления значения арифметического выражения, записанного в инфиксной нотации, с учетом приоритетов операций и скобок.
Основные постулаты языков программирования семейства Lisp.
Общая характеристика языка Scheme.
Типизация и система типов языка Scheme.
Способы определения процедуры в языке Scheme. Формальные и фактические аргументы, применение к аргументам, возвращаемое значение.
Простые типы языка Scheme и основные операции над ними.
Составные типы языка Scheme и основные операции над ними.
Символьный тип в языке Scheme и его применение.
Применение процедур (функций) высшего порядка для обработки списков на языке Scheme.
Лексические замыкания (на примере) в языке Scheme. Свободные и связанные переменные. Использование лексических замыканий для локальных определений (запись конструкций let
и let*
с помощью анонимных процедур).
Лексические замыкания (на примере) в языке Scheme. Свободные и связанные переменные. Использование лексического замыкания для определения процедуры со статической переменной.
Особенности логических операций в языке программирования Scheme.
Гигиенические макросы в языке Scheme.
Продолжения в языке Scheme.
Ввод-вывод в языке Scheme.
Средства для метапрограммирования языка Scheme.
Хвостовая рекурсия и ее оптимизация интерпретатором языка Scheme.
Основные управляющие конструкции языка Scheme.
Ассоциативные списки.
Точечные пары и списки в языках семейства Lisp.
Командный интерпретатор Bash: общая характеристика языка, пример сценария командной оболочки.
Действия программиста для создания сценария («скрипта») на интерпретируемом языке программирования, предназначенного для запуска из командной оболочки UNIX-подобной операционной системы.
Стандартные потоки ввода-вывода, аргументы командной строки. Перенаправление ввода-вывода в командной оболочке Bash, использование конвейеров (pipes).
Файловая система, путь к файлу и атрибуты файла. Основные команды оболочки для работы с файлами и папками.
Общая характеристика языка Javascript, типизация и система типов.
Понятие объекта. Создание и использование объектов в языке Javascript.
Применение функций высшего порядка для обработки последовательностей на языке Python Javascript.
Лексические замыкания (на примере) в языке Javascript. Свободные и связанные переменные.
Особенности логических операций в языке программирования Javascript.
Обработка исключений в языке Javascript.
Определение класса и создание объекта класса на языке Javascript.
Средства метапрограммирования языка Javascript.
Особенности присваивания, копирования и передачи в функцию объектов в языке Javascript.
Приведены только примеры задач
На языке Javascript напишите возможную реализацию встроенной функции filter
(варианты: map
для функции одной переменной, reduce
и пр.).
На языке Scheme напишите функцию drop
, принимающую список и целое число n и возвращающую исходный список без n первых элементов, например, так:
(drop '(1 2 3 4) 2) ⇒ (3 4)
На языке Javascript напишите 2 варианта функции, вычисляющей среднее арифметическое последовательности чисел. В одном варианте используйте императивные управляющие конструкции, во втором – встроенные функции высших порядков.