481
правка
м |
Greck (обсуждение | вклад) (красоту навожу. Ссылки делаю) |
||
где были переменные функции, или функция возвращала в качестве
результата другую функцию? Возможность создавать переменные типа
функций в языках Си/Си++, Паскаль, Delphi есть{{ref|
Перечисленные языки em процедурные, и они не приспособлены для того, чтобы писать программы в
функциональном стиле.
toDigsI :: Integer->[Integer]
toDigsI n | n == 0 = []
| otherwise = (n `mod` 2) : toDigsI (n `div` 2)▼
▲ (n `mod` 2) : toDigsI (n `div` 2)
countUnits = sum . toDigsI
toDigits = reverse . toDigsI
Функция <tt>
находит список его разрядов в двоичном представлении в направлении справа налево.
Стандартная функция <tt>
список, в котором элементы идут в обратном порядке, начиная с последнего до первого:
toPowers = (filter (/=0)) . (zipWith (*) powers) . toDigsI
Функция <tt>
и список, а возвращает список только из тех элементов, на которых значение
этой функции равно «правде». В данном случае мы оставляем только ненулевые элементы:
<tt>toPowers (16+8+1) <math>\Rightarrow</math> [1,8,16]. </tt>
Функция «<tt>
Если указано только два аргумента, то она превращается в функцию от одного аргумента.
Это позволяет использовать выражение «<tt> (zipWith (*) powers) </tt> »
неё первый аргумент — «<tt> (/=0) </tt>» — это функция сравнения с нулём.
Второй аргумент остался неопределённым. Он достанется ей по цепочке как значение
функции «<tt> (zipWith (*) powers) </tt>
<tt> toDigsI </tt>, применённая к тому, что даст пользователь в качестве аргумента функции
<tt> toPowers </tt>.
Точки в определении функции <tt> toPowers </tt> играют роль операции «|» (pipe) в стандартной оболочке Linux.
С помощью этой операции происходит передача результатов вычисления одной функции
* Software AG, одна из главных программистских компаний Германии, разработала на функциональном языке экспертную систему Natural Expert. Пользователи с огромным удовольствием пишут для этой системы свои приложения.
Система работает на мейнфреймах IBM.
* Компания Ericsson разработала функциональный язык [http://www.erlang.org Erlang] для создания системы управления телефонных станций.
* Исследователи в корпорации MITRE используют Haskell для [[:w:прототипирование|прототипирования]]{{ref|
Для многих программистов не секрет, что на процедурных языках
* [[w:Haskell|Язык программирования Haskell]], статья в Википедии
* [[Основы функционального программирования]], курс лекций в Викиучебнике
* [http://www.haskell.ru/ Российский сайт про Haskell]
* [http://wtk.norilsk.net/pm/fp/haskell.html Введение в язык Haskel Михаила Потанина]
== Примечания ==
# {{note|
# {{note|
:На этапе прототипирования выявляются важные архитектурные ошибки, вносятся поправки в интерфейсы модулей (перераспределяется функциональность между кусочками системы). Прототипирование по мнению многих программистов является самым приятным этапом разработки, так как малыми усилиями создается нечто более-менее работающее. Кроме того, во время прототипирования на программистов обычно «снисходит понимание» и они начинают «видеть», как система должна быть устроена.
|
правка