Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 2542 03-04-2007 03:46 | |
Ответ на »сообщение 2541« (panda)
___________________________
Спасибо, panda. Скачал, посмотрю.
№ 2541 03-04-2007 03:33 | |
Ответ на »сообщение 2538« (Сергей Осколков)
___________________________
А кто скажет, можно познакомиться с функциональным программированием, какое-то представление о нем составить, на тех элементах функционального программирования, которые есть в Python?
Конечно, можно. Скачайте книгу - http://www.python.ru/files/book-ods.pdf и посмотрите. Там все очень хорошо описано. Вот, например, как сформировать таблицу умножения: Table = [(range(1*x, 10*x, x)) for x in range(1, 10)]
В своей текущей ситуации вижу больше поводов лучше познакомиться с ним, т.к. применения чисто функциональных языков "на работе и дома" сходу не вижу.
Я для себя именно такое решение и принял.
№ 2540 03-04-2007 03:31 | |
Ответ на »сообщение 2517« (Max Belugin)
___________________________
Но сейчас это просто не нужно.
Не уверен, что не нужно. Форт -- очень интересный язык и весьма эффективная система для решения ряда задач, для которых тот же Оберон является не самым оптимальным выбором. Я имею в виду различные формальные модели (формализмы), которые легко отображаются на "железо". Своего рода прослойка между "железом" и языками высокого уровня. Расширяемый спец. ран-тайм на стековой архитектуре.
Большой недостаток Форта -- не просто непривычность синтаксиса, а вообще readability. Она у него хромает. Но для определенного класса задач, где требуется получить максимально эффективное решение и где нет надобности исключительно на нем строить гигантские софтверные "сооружения", это хороший инструмент. Назову лишь некоторые: конечные автоматы, сети Петри, клеточные автоматы. Задачи управления и дискретного моделирования. В той же известной популярной книге Тоффоли и Марголуса "Машины клеточных автоматов" Форт вообще лежит в основе изложения предмета. Кстати, эта книга и две лучших книги по сетям Петри (Питерсона и Котова) опубликованы на EuroProg.
Форт -- вообще почти идеальный, на мой взгляд, язык для реализации всевозможных исполняющих систем (run-time), поверх которых плавают высокоуровневые универсальные и проблемно-ориентированные языки. Если бы сейчас стояла, например, задача реализовать исполняющую систему для Пролога (та же абстрактная машина Уоррена, WAM), думаю, Форт был бы едва ли не лучшим выбором в качестве языка реализации.
№ 2539 03-04-2007 03:19 | |
А вот еще пример, что при наличии достаточного количества сахара программа на ИЯ ничуть не длиннее.
program ACM_2007_A;
allels := ], ['A',], ['A',], ['B',], ['B',], ['AB',]};
rallels := ], ['+',], ['-',]};
childB:=;
for a,b in do
childB([a,b]):= : u in +/ allels, v in +/ allels}};
end;
childR:=;
for a,b in do
childR([a,b]):= : u in +/ rallels, v in +/ rallels}};
end;
n:=1;
loop do
get('',line);
if eof then quit; end;
papa := span(span(line,' '),'ABO+-?');
if papa = '' then quit; end;
mama := span(span(line,' '),'ABO+-?');
baby := span(span(line,' '),'ABO+-?');
case of
(papa='?'): print('Case',n,':', show(parent(mama, baby)), mama, baby);
(mama='?'): print('Case',n,':', papa, show(parent(papa, baby)), baby);
(baby='?'): print('Case',n,':', papa, mama, show(child(papa, mama)) );
end case;
n+:=1;
end loop;
proc child(p1,p2);
a1:= span(p1,'ABO');
a2:= span(p2,'ABO');
return ;
end proc;
proc parent(p,c);
ap:= span(p,'ABO');
ac:= span(c,'ABO');
as:=;
rs:=;
return ;
end proc;
proc show(s);
if s= then return 'IMPOSSIBLE';
elseif #s=1 then return arb s;
else
res := '{';
while #s > 1 do res +:= from s + ', '; end;
return res + from s + '}';
end if;
end proc;
end program;
№ 2538 03-04-2007 03:13 | |
А кто скажет, можно познакомиться с функциональным программированием, какое-то представление о нем составить, на тех элементах функционального программирования, которые есть в Python? В своей текущей ситуации вижу больше поводов лучше познакомиться с ним, т.к. применения чисто функциональных языков "на работе и дома" сходу не вижу.
№ 2537 03-04-2007 02:57 | |
Ответ на »сообщение 2487« (Сергей Осколков)
___________________________
>>>Здесь всплывает вопрос о целях преподавания программирования в школе. На мой взгляд в обучении имеет смысл не спрятать проблемы арифметики больших чисел, а показать их. Имхо гораздо интереснее не просто вычислить на мощном калькуляторе 100!, а разобраться, каким образом можно организовать такие вычисления.
Мне тоже так думается.
Если, конечно, речь идет об уроках информатики и программирования.
>>>Кстати говоря всё преимущество примера вычисления факториала - не в особенностях функциональных языков, а во встроенном целом типе произвольной длины, что есть например и в Python'е.
Есть такая ядовитая фраза, я ее уже цитировал:
языки, оптимально приспособленные для вычисления факториала.
Это о том, как иногда пытаются "рекламировать" ФЯ.
У тех, кто понимает в чем тут фокус (а дело здесь совсем не в функциональности), это вызывает раздражение.
По крайней мере, у меня вызывает. :)
№ 2536 03-04-2007 02:04 | |
Ответ на »сообщение 2521« (RBV)
___________________________
:) Мне всегда нравятся заявления людей не имеющих отношения к образованию, о том, что лучше для оного. В особенности для школьного.
А мы сами когда-то были школьниками, так что помним, чему нас там учили, или точнее чему мы сами там учились и как учились другие школьники...
Большинству учеников ни Оберон, ни Хаскелл не нужны...
Оставшимя нескольким процентам изучать Хаскелл будет ничуть не труднее, чем Оберон, а даже легче, потому что поинтереснее. Правда, ещё интереснее С++, но уже, увы, не легче... :о)
А я ещё и FORTH-83 на ПК Корвет изучал (вернее, баловался)... Круто было...
№ 2535 03-04-2007 01:24 | |
>>>На мой взгляд дифференциальное исчисление гораздо нагляднее лямбда
>>>исчисления.
Я уже говорил - все зависит от того КАК и в КАКИХ объемах давать материал. Никто и никогда не пытался давать матанализ в школе на том же уровне, что и на мехмате. Я думаю, что и основные концепции ФП можно адаптировать к школьному уровню. В конце концов школьникам даются основы и теории множеств, и теории действительных чисел. Но при этом без тех сложностей, которые на самом деле сопутствуют этим фундаментальным понятиям.
№ 2534 03-04-2007 01:11 | |
>>>Не могу тут ничего сказать. Самому интересно каков будет продукт
>>>столкновения двух противоположных векторов. Необходимости учиться, и
>>>желания заработать. Это уже сложный социальный эксперимент со многими
>>>неизвестными.
Думаю, что ситуация напоминает проблемы дорожного движения. С помощью хороших дорог (Oberon) и качественных светофоров (ФП) качество движения можно улучшить.
Но... раздолбаи на джипах и мотоциклах были, есть и будут :)))
№ 2533 Удалено модератором | |
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|