ВУЗ:
Составители:
Рубрика:
Но, пожалуй, наибольший резонанс у теоретиков программирования имел функциональный
язык, предложенный Дж. Бэкусом 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
- …
- следующая ›
- последняя »