- Главная
- Информатика
- Функциональное программирование
Содержание
- 2. Вебинар № 4. Функциональное программирование
- 4. Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых
- 5. Программы, написанные на языках высокого уровня, проще для понимания программистом, но менее эффективны, чем их аналоги,
- 6. В 1940-х годах появились первые цифровые компьютеры, которые программировались переключением различного рода тумблеров, проводков и кнопок.
- 7. В парадигме функционального программирования краеугольный камень, — это функция. Вспомнив историю математики, можно оценить возраст понятия
- 8. Математические функции выражают связь между исходными данными и итоговым продуктом некоторого процесса. Процесс вычисления также имеет
- 9. Большинство функциональных языков программирования реализуются как интерпретируемые, следуя традициям Лиспа (примечание: большая часть современных реализаций Лиспа
- 10. Как основные свойства функциональных языков кратко рассмотрим следующие: краткость и простота; строгая типизация; модульность; функции —
- 11. Краткость и простота Программы на функциональных языках обычно короче и проще, чем те же самые программы
- 12. Как видно на этом примере, функциональная формулировка алгоритма короче и яснее чем императивная, хоть последняя в
- 13. Строгая типизация Из современных языков программирования многие суть строго типизированные. Строгая типизация позволяет компилятору оптимизировать программы,
- 14. В примере с быстрой сортировкой Хоара видно, что есть ещё одно важное отличие между вариантом на
- 15. Ещё одно проявление полиморфизма — перегрузка функций, позволяющая давать разным, но подобным функциям одинаковые имена. Типичный
- 16. Модульность Механизм модульности позволяет разделять программы на несколько сравнительно независимых частей (модулей) с чётко определёнными связями
- 17. Функции суть значения В функциональных языках, равно как и вообще в языках программирования и математике, функции
- 18. Чистота (отсутствие побочных эффектов) В императивных языках функция в процессе своего выполнения может читать и изменять
- 19. Отложенные вычисления В традиционных языках программирования (например, Си++) вызов функции приводит к вычислению всех аргументов. Этот
- 21. Скачать презентацию
Вебинар № 4.
Функциональное программирование
Вебинар № 4.
Функциональное программирование
Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и
Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и
Высокоуровневые языки программирования были разработаны для платформенной независимости сути алгоритмов. Зависимость от платформы перекладывается на инструментальные программы — трансляторы, компилирующие текст, написанный на языке высокого уровня, в элементарные машинные команды (инструкции). Поэтому, для каждой платформы разрабатывается платформенно-уникальный транслятор для каждого высокоуровневого языка, например, переводящий текст, написанный на Delphi в элементарные команды микропроцессоров семейства x86.
Так, высокоуровневые языки стремятся не только облегчить решение сложных программных задач, но и упростить портирование программного обеспечения. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами программируемыми устройствами и оборудованием, и, в идеале, не требует модификации исходного кода (текста, написанного на высокоуровневом языке) для любой платформы.
Программы, написанные на языках высокого уровня, проще для понимания программистом, но
Программы, написанные на языках высокого уровня, проще для понимания программистом, но
Примеры: C++, C#, Java, JavaScript, Python, PHP, Ruby, Perl, Паскаль, Delphi, Лисп. Языкам высокого уровня свойственно умение работать с комплексными структурами данных. В большинстве из них интегрирована поддержка строковых типов, объектов, операций файлового ввода-вывода и т. п.
Первым языком программирования высокого уровня считается компьютерный язык Plankalkül, разработанный немецким инженером Конрадом Цузе ещё в период 1942—1946 годах. Однако транслятора для него не существовало до 2000 года. Первым в мире транслятором языка высокого уровня является ПП (Программирующая Программа), он же ПП-1, успешно испытанный в 1954 году. Транслятор ПП-2 (1955 год, 4-й в мире транслятор) уже был оптимизирующим и содержал собственный загрузчик и отладчик, библиотеку стандартных процедур, а транслятор ПП для ЭВМ Стрела-4 уже содержал и компоновщик (linker) из модулей. Однако, широкое применение высокоуровневых языков началось с возникновением Фортрана и созданием компилятора для этого языка (1957).
В 1940-х годах появились первые цифровые компьютеры, которые программировались переключением
В 1940-х годах появились первые цифровые компьютеры, которые программировались переключением
Но даже ассемблеры не могли стать тем инструментом, которым смогли бы пользоваться многие люди, поскольку мнемокоды всё ещё оставались слишком сложными, а всякий ассемблер был жёстко связан с архитектурой, на которой исполнялся. Шагом после ассемблера стали так называемые императивные языки высокого уровня: Бейсик, Паскаль, Си, Ада и прочие, включая объектно-ориентированные. Императивными («предписывающими») такие языки названы потому, что ориентированы на последовательное исполнение инструкций, работающих с памятью (т. е. присваиваний), и итеративные циклы. Вызовы функций и процедур, даже рекурсивные, не избавляли такие языки от явной императивности.
В парадигме функционального программирования краеугольный камень, — это функция. Вспомнив
В парадигме функционального программирования краеугольный камень, — это функция. Вспомнив
Математические функции выражают связь между исходными данными и итоговым продуктом
Математические функции выражают связь между исходными данными и итоговым продуктом
Функциональное программирование, как и логическое программирование, нашло большое применение в теории искуственного интеллекта и её приложениях.
Большинство функциональных языков программирования реализуются как интерпретируемые, следуя традициям Лиспа
Большинство функциональных языков программирования реализуются как интерпретируемые, следуя традициям Лиспа
Как основные свойства функциональных языков кратко рассмотрим следующие:
краткость и простота;
строгая
Как основные свойства функциональных языков кратко рассмотрим следующие:
краткость и простота;
строгая
модульность;
функции — это значения;
чистота (отсутствие побочных эффектов);
отложенные (ленивые) вычисления.
Краткость и простота
Программы на функциональных языках обычно короче и проще,
Краткость и простота
Программы на функциональных языках обычно короче и проще,
Как видно на этом примере, функциональная формулировка алгоритма короче и
Как видно на этом примере, функциональная формулировка алгоритма короче и
Кроме того, все операции с памятью выполняются автоматически. При создании какого-либо объекта под него автоматически выделяется память. Когда объект выполнит своё предназначение, он вскоре будет также автоматически уничтожен сборщиком мусора, который имеется в любом функциональном языке.
Ещё одно средство, позволяющее сократить программу, — встроенный механизм сопоставления с образцом. С ним можно описывать функции как индуктивные определения.
Строгая типизация
Из современных языков программирования многие суть строго типизированные. Строгая
Строгая типизация
Из современных языков программирования многие суть строго типизированные. Строгая
В примере с быстрой сортировкой Хоара видно, что есть ещё
В примере с быстрой сортировкой Хоара видно, что есть ещё
Ещё одно проявление полиморфизма — перегрузка функций, позволяющая давать разным,
Ещё одно проявление полиморфизма — перегрузка функций, позволяющая давать разным,
В языке Си++ имеется такое понятие, как шаблон, которое позволяет программисту определять полиморфные функции, подобные quickSort. В стандартную библиотеку Си++ — STL — входит такая функция и множество других полиморфных функций. Но шаблоны Си++, как и родовые функции Ады, на самом деле порождают множество перегруженных функций, которые, кстати, нужно каждый раз компилировать, что неблагоприятно сказывается на времени компиляции и размере кода. А в функциональных языках полиморфная функция quickSort — это одна единственная функция. С другой стороны, функциональные языки в этом плане проигрывают по скорости выполнения.
Модульность
Механизм модульности позволяет разделять программы на несколько сравнительно независимых частей
Модульность
Механизм модульности позволяет разделять программы на несколько сравнительно независимых частей
Функции суть значения
В функциональных языках, равно как и вообще в
Функции суть значения
В функциональных языках, равно как и вообще в
Чистота
(отсутствие побочных эффектов)
В императивных языках функция в процессе своего выполнения
Чистота
(отсутствие побочных эффектов)
В императивных языках функция в процессе своего выполнения
Описывать функции без побочных эффектов позволяет практически любой язык. Однако некоторые языки поощряют или даже требуют от функции побочных эффектов. Например, во многих объектно-ориентированных языках в функцию-член класса передаётся скрытый параметр (чаще он называется this или self), который эта функция неявно изменяет.
Отложенные вычисления
В традиционных языках программирования (например, Си++) вызов функции приводит
Отложенные вычисления
В традиционных языках программирования (например, Си++) вызов функции приводит
Если функциональный язык не поддерживает отложенные вычисления, то он называется строгим. На самом деле, в таких языках порядок вычисления строго определён. В качестве примера строгих языков можно привести Scheme, Standard ML и Caml. Языки, использующие отложенные вычисления, называются нестрогими. Haskell — нестрогий язык, так же как, например, Gofer и Miranda. Нестрогие языки зачастую являются чистыми.