Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 3062 03-10-2007 06:48 | |
Ответ на »сообщение 3049« (Jack Of Shadows)
___________________________
Вагиф, скажите пожалуйста, а что Вы думаете про РЕФАЛ? Какое место он, с вашей точки зрения, занимает в семействе функциональных (хотя, наверное, шире - декларативных, ведь он "марковский") языков?
№ 3061 03-10-2007 06:05 | |
Ответ на »сообщение 3047« (Jack Of Shadows)
___________________________
>>>Может после школы они у вас в большинстве вот так деградируют ?
Если их оценивают по количеству строк кода, то иного трудно ожидать :)
№ 3060 03-10-2007 04:53 | |
Ответ на »сообщение 3059« (Руслан Богатырев)
___________________________
Что касается "идеологии безошибочности". Немногие знают, что в 1951 г. в Манчестере Алан Тьюринг выступил с лекцией "Интеллектуальные машины. Еретическая теория" (развитие его работы 1948 г.). Он сказал: "Моя точка зрения такова: можно сконструировать машины, которые весьма близко смогут моделировать поведение человеческого разума. Они будут порой ошибаться, а иногда смогут выдавать новые весьма интересные утверждения, и в целом их выводы будут заслуживать внимания в такой же степени, как и сделанные человеческим разумом". Тьюринг отмечает важнейший момент: "Я уверен, что опасность того, что математик сделает ошибку, является неизбежным следствием его способности порой находить принципиально новый метод. Похоже, это подтверждается хорошо известным фактом, что наиболее надёжные люди обычно не обнаруживают действительно новых методов".
№ 3059 03-10-2007 04:48 | |
Ответ на »сообщение 3058« (Стэн)
___________________________
Или Вы хотите, чтобы y = x * x, при x = 5 выдавала то 25, то 24, то 36?
Я хочу, чтобы были понятны ограничения применимости понятия функции (в математике). Чтобы мы отдавали себе отчет в том, что в ряде случаев эти "железобетонные устои" серьезно ограничивают наши возможности (в том числе и в программировании). В частности, в ФП функция (в математическом смысле) является ключевой сущностью.
№ 3058 03-10-2007 04:40 | |
Ответ на »сообщение 3053« (Руслан Богатырев)
___________________________
>>> MOD, как и хеш, ставят в соответствие нескольким элементам x из X один элемент y из Y. И это функция. И это сюръективное отображение, сюръекция. Вот если бы ставилось несколько... А, так Вы смотрите с другой стороны? Но это уже не функция в традиционном математическом смысле.
Да, пожалуйста:
y = Af(x)
y[y1, y2, y3] = A[a1, a2, a3] f(x)
Или матрицы и вектора уже не математика?
Или Вы хотите, чтобы y = x * x, при x = 5 выдавала то 25, то 24, то 36?
№ 3057 03-10-2007 04:06 | |
Ответ на »сообщение 3044« (Jack Of Shadows)
___________________________
Ответ на »сообщение 3042« (Илья Ермаков)
___________________________
Ну как ? испугались страшной монады ? Смльно отличается от того как вы это записали бы в обероне ?
Единственное видимое отличие знак <- вместо :=
Вот и все, вылезайте из под одеяла :))
Нет, не сильно :-) В том-то и дело, что если человек большую часть времени программирует задачи из области "рецептов", то в чём смысл переходить на Хаскелл? Чтобы большую часть кода написать в стиле "не сильно отличающемся"? Зато потерять привычную прозрачность императива для этих задач.
Будьте уверены, если бы я занимался, например, программированием AI или остался в компьютерной лингвистике, то меня не пришлось бы ни минуты убеждать переходить на LISP али Haskell :-)
№ 3056 03-10-2007 04:01 | |
Ответ на »сообщение 3051« (panda)
___________________________
Ответ на »сообщение 3043« (Илья Ермаков)
___________________________
Может, эти новички просто читают умные книжки? Например, "Рефакторинг" Мартина Фаулера. Такая мысль Вам в голову не приходила?
Меня мало интересует, что читают люди, не знающие основ грамотного алгоритмирования. И не представляющие жизни без субститутов goto.
№ 3055 03-10-2007 03:50 | |
Ответ на »сообщение 3054« (Сергей Осколков)
___________________________
невозможна - по определению функции.
№ 3054 03-10-2007 03:49 | |
Ответ на »сообщение 3050« (Стэн)
___________________________
Ответ на »сообщение 3039« (Руслан Богатырев)
___________________________
>>> О, Вы не в курсе определения понятий "функция" и "отображение" в математике? :)
ОК. Тогда расскажите, пожалуйста, что это такое:
y(x) = x mod 5, где x = 1, 2, 3, ... (n >> 5).
И как так получается, что множество элементов X отображается в множество Y = {0, 1, 2, 3, 4}, где каждому y соответствует много элементов из X? Пример: y = 2 | x = 7, 12, 17...
Или это уже не математика?
Каждому элементу из области определения функция ставит в соответствие единственный элемент из множества значений.
Но это совсем не означает, что двум разным элементам из области определения не может быть сопоставлен один и тот же элемент множества значений.
Иначе говоря ситуация
x1
\
\
y
/
/
x2
возможна, а
y1
/
x
\
y2
невозможна.
№ 3053 03-10-2007 03:48 | |
Ответ на »сообщение 3050« (Стэн)
___________________________
И как так получается, что множество элементов X отображается в множество Y = {0, 1, 2, 3, 4}, где каждому y соответствует много элементов из X? Пример: y = 2 | x = 7, 12, 17...
Или это уже не математика?
MOD, как и хеш, ставят в соответствие нескольким элементам x из X один элемент y из Y. И это функция. И это сюръективное отображение, сюръекция. Вот если бы ставилось несколько... А, так Вы смотрите с другой стороны? Но это уже не функция в традиционном математическом смысле.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|