Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1262 19-09-2006 02:38 | |
Ответ на »сообщение 1258« ()
___________________________
Из этого следует весьма неприятный для ФЯ вывод.
Любая программа, написанная на ЧИСТОМ ФЯ (без императивных вставок) бесполезна.
А чистые стили вообще сейчас уже практически не используются...
Тот же самый чистый ООП-язык Self заброшен Sun'ом..
№ 1261 19-09-2006 02:37 | |
Ответ на »сообщение 1256« (Jack Of Shadows)
___________________________
listFoldl p a [] = a
listFoldl p a (x:xs) = listFoldl p (p a x) xs
я имел в виду что-то типа того:
listFoldl (+) 0 [1, 2, 3] -->
listFoldl (+) ((+) 0 1) [2, 3] -->
listFoldl (+) ((+) ((+) 0 1) 2) [3] -->
listFoldl (+) ((+) ((+) ((+) 0 1) 2) 3) [] -->
((+) ((+) ((+) 0 1) 2) 3) -->
(+ (+ (+ 0 1) 2) 3)
Ну вообще-то да, типичный Лисп! :-))
№ 1260 19-09-2006 02:01 | |
сообщение от модератораЗа "глупую голову" Jack Of Shadows лишается права публиковать свои сообщения на сутки - с 19.09.06 11:00 мск по 20.09.06 11:00 мск.
№ 1259 19-09-2006 01:54 | |
Ответ на »сообщение 1240« (Jack Of Shadows)
___________________________
>>>Я десятки языков перевидал, но ни одного не встречал в котором не было бы того или иного механизма модульности.
На Паскале не приходилось работать?
№ 1258 18-09-2006 22:06 | |
Ответ на »сообщение 1249« (Jack Of Shadows)
___________________________
Из этого следует весьма неприятный для ФЯ вывод. Любая программа, написанная на ЧИСТОМ ФЯ (без императивных вставок) бесполезна. Как например, бесполезна программа
programm Unusual;
begin
writeln(SQRT(2));
end.
Надеюсь, понятно, почему?
Сообщение не подписано
№ 1257 18-09-2006 17:30 | |
Ответ на »сообщение 1256« (Jack Of Shadows)
___________________________
Тьфу, я имел в виду как вы напишете со скобками ПОСЛЕ именем функции ?
№ 1256 18-09-2006 17:28 | |
Ответ на »сообщение 1255« (Geniepro)
___________________________
то у меня волей-неволей получается типичная лисповская скобочная запись, с одним только отличием - открывающая скобка стоит не до имени функции, а после него... :-)
А у меня точно как в лиспе - открывающаяся скобка стоит перед именем функции :))
Вот моя попытка написать fold:
listFoldl p a [] = a
listFoldl p a (x:xs) = listFoldl p (p a x) xs
listFoldr p a [] = a
listFoldr p a (x:xs) = p x (listFoldr p a xs)
А как вы напишете со скобками перед именем функции ?
№ 1255 18-09-2006 17:24 | |
Что, приятнее все-таки работать с более человеческим по синтаксису языком? Или вам еще обилие глупых скобок не надоело? :)
Кстати, когда я начинаю разбирать, как работает та или иная рекурсивная функция хотя бы на том же Хаскелле, то у меня волей-неволей получается типичная лисповская скобочная запись, с одним только отличием - открывающая скобка стоит не до имени функции, а после него... :-)
Ну так и причём тут Лисп, если эти скобки - естественный вид рекурсивной обработки данных?
_____________________________
>>Если нетрудно - приведите список из пяти "чистых" ФЯ.
Почему именно пять ? Три не устроит ? Haskell, Erlang, Clean
Кстати, можно добавить ещё и тот же SISAL, в котором не было повторных присваиваний, и благодаря этому программы работали нереально быстро... :-)
Вот что надо использовать любителям Оберона - синтаксис Ада-подобный, а на многопроцессорных системах программы будут работать на порядки быстрее, чем на Обероне... :-))
№ 1254 18-09-2006 17:00 | |
Ответ на »сообщение 1253« (Geniepro)
___________________________
Currying полезна для динамической генерации функций с меньшим количеством параметров чем было определено.
При этом часть параметров заменяется на какие то конкретные значения.
Например если есть функция
myfunc(x,y)
То можно создать другую myfunc2 = myfunc(x,2), где второй параметр заменяется конкретным значением.
После чего вызов myfunc2(5) в свою очередь вызовет myfunc(5,2)
Как видно из описания, currying достигается самым обычным определением новых функций.
Конечно синтаксис myfunc2 = myfunc(x,2) очень приятный, короткий и читабельный.
Но можно и обычными способами:
myfunc2(x)
{
return myfunc(x,2)
}
Тоже currying :))
№ 1253 18-09-2006 16:43 | |
Такой вопрос к нашим лисперам - часто ли вам приходится на Лиспе использовать каррирование функций и насколько это удобно и естественно? И нужно ли?
На Хаскеле и ML - нет проблем, а как на Лиспе/Scheme ?
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|