logo search
ЯП / ЯП / ЯП экзамен

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

Функциональное программирование - представляет собой набор определенных функций. Функцию определяют через другую функцию. В функциональном программировании вся программа ФУНКЦИЯ.

Программа на таком языке представляет собой совокупность описаний функций и выражения, которые необходимо вычислить. Оно вычисляется посредством редукции (т. е. серии упрощений). Функциональное программирование не использует концепцию памяти как хранилища значений переменных. Операторы присваивания отсутствуют, вследствие чего переменные обозначают не области памяти, а объекта программы, что полностью соответствует понятию переменной в математике. Наличие стройной математической основы обеспечивает возможность использования алгебраических методов создания структуры, преобразования и исследования программ. Это в какой-то мере приближает их к описанию структуры мышления человека.

Примером функционального языка является язык LISP (List Processing-обработка списков) Разработан и реализован в Массачусетском технологическом институте в 1959 г. Рассматривается специалистами как основной язык программирования систем искусственного интеллекта.

Основные положения этого стиля восприняты многими языками программирования с общей логикой уточнения решаемых задач и обобщения решений на основе выбранных специально базовых конструкций:

  1. Базовые конструкции определяются как строгие функции.

  2. При необходимости выполняются преобразования программ, (компиляция, оптимизация, ре-факторинг и т.п.) для улучшения эксплуатационных характеристик, связанных с процессами исполнения программ.

  3. Важный критерий качества программирования - полнота системы решений и универсальность реализованных определений для синтаксически управляемой обработки данных функциями высоких порядков (компилятор и т.п.), что существенно повышает надежность проектов для развивающихся постановок задач.

  4. Разработка ИС предусматривает выполнение ряда шагов, начальные из которых выполняют роль упрощенных прототипов для реализации последующих, возможно другими, более эффективными, средствами.

функциональное программирование представляет собой набор определенных функций, которые определяются рекурсивно или через другие функции. В процессе выполнения программы, ф-ии получают параметры, вычисляют и возвращают результат, в случае необходимости вычисляя значения других функций.

Порядок вычисления в функц ЯП не описывается, описывается лишь желаемый результат в виде системы функций. Большинство функц ЯП реализуются как интерпретаторы (Lisp, Haskell, ML, Standart ML…)

Свойства функциональных ЯП:

  1. краткость и простота – ФЯП выходят на более абстрактный уровень, чем традиц. ЯП

  2. строгая типизация – большинство ошибок могут быть исправлены на стадии компиляции. Строгая типизация позволяет генерировать эффективный код и ускорить выполнение программ. Некоторые ФЯП поддерживают перегрузку операций.

  3. Модульность – позволяет разделить программу на несколько сравнительно независимых частей с четко определенными связями между ними.

  4. Отсутствие побочных эффектов – в чистом функ программировании оператор присваивания отсутствует. Объекты нельзя уничтожать\изменять, можно только создавать новые, путем декомпозиции или синтеза существующих. Таким образом, невозможно получить 2 разных значения при вызове 1 и той же функции с одним аргументом дважды, как бывает в императивных ЯП.

  5. Отложенное вычисление – аргументы в функции вычисляется, только если они нужны для вычисления результата, тогда как в традиционных ЯП вызов функции приводит к вычислению всех аргументов. (если ФЯП не поддерживает отложенные вычисления, он называется строгим)