Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
здесь ВСЁ.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
317 Кб
Скачать
☆

4. Понятие функционального программирования и основные положения по а.П. Ершову.

Основы функционального программирования.

1)Тезисы А.П. Ершова.

2)Свойства функциональности

3)Виды вычислений

4)Обзор основных функциональных языков программирования.

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

А.П.Ершов сказал: «Способ составления программ, при котором:

- единственным действием является вызов функции;

- единственным способом расчленения программы на части является введение имени функции;

- единственным способом композиции является оператор суперпозиции;

- никаких ячеек памяти;

- ни операторов-присваивания;

- ни блок-схем;

- ни передач управления».

5. Понятие функциональности.

Свойство функциональности (прозрачность по ссылкам) означает, что результат работы функции не зависит от места программы в котором она вызвана, а зависит только от аргументов вызова.

Основное требование к программе – функциональность: значение функции зависит только от нее самой и аргумента вывода, но не зависит от места программы, в котором эта функция встречается (т.е. не должно быть обращения функции к глобальной переменной). Менее принципиальное свойство – бестиповость.

6. Понятие прозрачности по ссылкам.

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

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

7. Виды вычислений в функциональных языках.

Ленивые вычисления означают, что на каждом шаге вычисляется только то, что нужно для того, чтобы перейти к следующему шагу.

Энергичные вычисления – вычисляется всё, что может быть вычислено.

В энергичном случае вычисляется всё, что можно, а в ленивом – всё, что нужно.

Язык |Вычисления |наличие императивного включения |практичность |типизация|

Common Lisp|Энергичные |не чистый |практичен |без типов|

Sheme |Энергичные |не чистый |академичный |без типов|

Рефал |Ленивый |чистый |академичный |типизир. |

ML |Ленивый |не чистый |академичный |типизир. |

OCAL |Энергичные |чистый |академичный |типизир. |

Haskell |Ленивый |не чистый |академичный |типизир. |

F# |Ленивый |не чистый |академичный |типизир. |

Erlang |Энергичные |чистый |практичен |без типов|

C# |Энергичные |не чистый |практичен |типизир. |

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]