ВУЗ:
Составители:
Рубрика:
Но, пожалуй, наибольший резонанс у теоретиков программирования имел функциональный
язык, предложенный Дж. Бэкусом 1979 году. Он был создан, одним из "отцов" фортрана не
только как альтернатива Фортрану и всем прочим процедурным языкам, но в известной
мере и как альтернатива LISP, синтаксис которого ориентировался на устаревшее
представление об архитестуре компьютера, да и в области математической логики за тот
период произошли заметные подвижки.
Следуя за Дж. Бэкусом сравним процедурный и функциональные стили программирования.
Пусть у нас есть фрагмент процедурной программы:
с := 0
for i := 1 to N do c := c + a[i] * b[j]
Беспристрастный, но строгий анализ показывает очевидные недостатки процедурного
программирования:
1. Операторы работают с невидимыми значениями переменных.
2. Программа неиерархична (операторы одного уровня).
3. Программа динамична (чтобы её понять необходимо её выполнить).
4. Последовательно выполняются операции с отдельными элементами массива.
5. Часть данных находится в программе.
6. Программа называет свои операнды, предварительно их записав.
7. Отсутствует механизм сбора мусора - ненужные части программы продолжают
находиться в памяти.
На языке, предложенном Бэкусом, та же самая задача решается проще:
(/+) (*) T :
где
Т – транспозиция (проектирование),
- композиция,
/ - вставка,
- применить ко всем (applay to all)
это функциональные формы, они оперируют функциями
+ и * - традиционные функции.
Приведем пример выполнения этой программы:
(/+)(*)T :<<1,2,3>,<6,5,4>>
кортеж из двух кортежей
(/+)(*): <<1,6>,<2,5>,<3,4>>
(/+): <6,10,12>
:28
Достоинства метода:
1. Нет невидимых данных.
2. Программа иерархична, т.к. есть не только функции, но и функциональные формы.
3. Статическое описание программы. Программа читается «за один проход».
4. Работаем сразу со всеми данными, а не с отдельными элементами.
5. В теле программы нет никаких данных.
6.В программе нет названий операндов.
7. Сбор мусора - программы и данные эволюционируют в процессе вычислений.
Принципиальное отличие функционального программирования от процедурного состоит в
том, что функциональное программирование не требует от пользователя управления
памятью.
— 98 —
Но, пожалуй, наибольший резонанс у теоретиков программирования имел функциональный
язык, предложенный Дж. Бэкусом 1979 году. Он был создан, одним из "отцов" фортрана не
только как альтернатива Фортрану и всем прочим процедурным языкам, но в известной
мере и как альтернатива LISP, синтаксис которого ориентировался на устаревшее
представление об архитестуре компьютера, да и в области математической логики за тот
период произошли заметные подвижки.
Следуя за Дж. Бэкусом сравним процедурный и функциональные стили программирования.
Пусть у нас есть фрагмент процедурной программы:
с := 0
for i := 1 to N do c := c + a[i] * b[j]
Беспристрастный, но строгий анализ показывает очевидные недостатки процедурного
программирования:
1. Операторы работают с невидимыми значениями переменных.
2. Программа неиерархична (операторы одного уровня).
3. Программа динамична (чтобы её понять необходимо её выполнить).
4. Последовательно выполняются операции с отдельными элементами массива.
5. Часть данных находится в программе.
6. Программа называет свои операнды, предварительно их записав.
7. Отсутствует механизм сбора мусора - ненужные части программы продолжают
находиться в памяти.
На языке, предложенном Бэкусом, та же самая задача решается проще:
(/+) (*) T :
где
Т – транспозиция (проектирование),
- композиция,
/ - вставка,
- применить ко всем (applay to all)
это функциональные формы, они оперируют функциями
+ и * - традиционные функции.
Приведем пример выполнения этой программы:
(/+)(*)T :<<1,2,3>,<6,5,4>>
кортеж из двух кортежей
(/+)(*): <<1,6>,<2,5>,<3,4>>
(/+): <6,10,12>
:28
Достоинства метода:
1. Нет невидимых данных.
2. Программа иерархична, т.к. есть не только функции, но и функциональные формы.
3. Статическое описание программы. Программа читается «за один проход».
4. Работаем сразу со всеми данными, а не с отдельными элементами.
5. В теле программы нет никаких данных.
6.В программе нет названий операндов.
7. Сбор мусора - программы и данные эволюционируют в процессе вычислений.
Принципиальное отличие функционального программирования от процедурного состоит в
том, что функциональное программирование не требует от пользователя управления
памятью.
— 98 —
Страницы
- « первая
- ‹ предыдущая
- …
- 96
- 97
- 98
- 99
- 100
- …
- следующая ›
- последняя »
