Специальная математика. Соловьев А.Е. - 98 стр.

UptoLike

Составители: 

Рубрика: 

Но, пожалуй, наибольший резонанс у теоретиков программирования имел функциональный
язык, предложенный Дж. Бэкусом 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 —