• Авторизация


функциональное программирование 31-12-2006 18:04 к комментариям - к полной версии - понравилось!


когда мы начали проходит функциональное программирование оно мне показалось примерно таким же бестолковым и по сути бесполезным как и рекурсивно-логическое.

а когда я сталкулся с Lisp я понял почему его называют Lots of Idiotic Silly Parentheses. язык очень неудобный. а самое отстояное в нём это префиксная запись.
т.е. формала 2 + 2 будет писаться как + 2 2.
ну и т.д. 2 + 2 * 3 = 8 будет = 8 (+ 2 (* 2 3))

вот такая вот жопа. очень не удобный и сложный в использовании язык.

но! когда мне пришлось писать сложный разборщик выражений я оценил всю прелесть функционально программирования.

у меня получился язык, который на много удобнее лиспа а по функционалу не так уж и отстаёт от него.

вот к примеру факториал:

F(n) = if (n <= 1; 1; n * F(n-1));

вот сейчас занимаюсь усовершенствованием языка и делаю код красивым.. получается прикольная штуковина..

это аппарат я буду, кстати, очень скоро использовать в одном комммерческом проекте. там будет граф и на каждое ребро будет навешиваться по одной сложной функции, которая будет определять можно ли по этому ребру в данный момент перейти.

вообще функциональное программирование (как и рекурсивно-логическое) ближе к математике чем к программированиею так, как делает основную ставку на понятность записи а не на скорость.

уверен на все 100 что челы, которые пишут на асссемблере или просто мечтают уменьшить время выполнение процедуры ещё хоть на милесекунду, посчитают функциональное программирование просто теоритическим бредом математиков а не языком программирования..
но.. что может быть лучше чем написать qsort в 2 строчки? (код на Haskell)

qsort[] = []
qsort(x:xs) = qsort[y | y < -xs, y < x] ++ [x] ++ qsort[y | y < -xs, y >= x]

мне кажестя, что языки программирования никогда не будут похожи на естественные языки.
может будут скрипты, которые будут созданы для смарт юзеров.
конечно, останутся паскаль и делфи для тех, кто плохо разбирается в програмировании.

но программисты всегда будут стремиться к математическому псевдокоду.
вверх^ к полной версии понравилось! в evernote
Комментарии (20):
Vzlomka 31-12-2006-18:19 удалить
Дарагой, ты че? Новый год на носу!=)
31-12-2006-18:43 удалить
Что за бня, на попытку прокомментировать Вас в залогинившемся виде лиру предлагает мне восстановить свой дневник, чего мне, признаться, делать совсем не хочется, ибо тот депрессивный бред, которому таки удаётся вырваться из моей полной депресивного бреда головы вполне комфортно чуствует себя в местах не столь отдалённых...

Ну так вот. Имхо Вы не осознали всех преимуществ обратной польской нотации - запись выражения не требует расстановки скобок и потому парсится много приятней привычной инфиксной записи - push(число), push(число), потом push(действие(pop(), pop())) и так далее. Хотя стандартная польская, ака постфиксная нотация, мне много ближе - то же выражение будет выглядеть там как 2 2 3 * +. Согласитесь, простенько и со вкусом. Особенно это пригодилось при написании нами компилятора си-подобного языка, того компилятора, который требовался для получения зачета по программированию в конце первого семестра.

А если Вы кинули мне ссылку на этот пост лишь с расчетом на то, что я отношось к тем "челам, которые пишут на асссемблере или просто мечтают уменьшить время выполнение процедуры ещё хоть на милесекунду, и потому посчитают функциональное программирование просто теоритическим бредом математиков, а не языком программирования", то, думаю, Вы просчитались - по всему выходит, что студенты матобеса СПбГУ в первую очередь математики, и только потом кодеры. Такая вот ботва.

Аппрентис.
31-12-2006-19:03 удалить
С наступающим Вас, кстати) В Оренбурге он на два часа раньше)
мда... кокой то странный язык.... надеюсь мы его проходить не будем)

LI 5.09.15
Baks256 01-01-2007-14:48 удалить
Аноним, бля, чел.
я кинул те эту ссылку потому что просто хотел те что-то новое показать. не думаю что ты до сих пор играешся с асссемблером :)
вот.. я просто так подумал и реши, что функциональное программирование ты скорей всего не знаешь.. вот решил что тебе буит интересно :))
чисто из хороших побуждений..

а во поводу извращенной записи числа... в лиспе на самом деле приходится ставить кучу долбанных скобок. но Лисп это не единственный функционаьный язык програмиирования и далеко не самый лучший.

нормальная запись типа 2 + 2 смотрится куда логичнее так как мы её юзаем с первого класса.

:)

и прекрати меня называть на "вы". не такой уж ты и малявка :)
Baks256 01-01-2007-14:49 удалить
Взломщица, ты мне предлагаешь написать новогодний пост? :)) они же и так у всех.

я если честно уже немного устал от постов про елку, мандарины, подарки и детство :))
Baks256 01-01-2007-14:55 удалить
Аноним, кстати, я писал курсач по компиляторам. и там я делал язык чем-то похожий на С#.
мне за эту курсовую (хоть я и сдал её уже на экзамене) поставили 5 и за экзамен 5 автоматом.

там использовалась нормальная человеческая запись числа.

нас тож учили что пол надо строить какой-то поилиз и там должна быть префиксная запись числа...

но всё это бред. абсолютно любое выражение можно разобрать двумя стэками (операторы и операнды) за один проход.
а я вместо двух стэков сделал дерево. и получилось надо сказать очень удобная штука. куда проще для отладки чем этот полиз.. :)
Baks256 01-01-2007-14:56 удалить
Irka_17, девушкам вообще программировние не нужно учаить :) вам надо просто быть.. желательно красивыми :))
вы нам такие нужны :)
а программировнаие как-нибудь обойдётся без вас :)
_Linx_ 01-01-2007-16:44 удалить
Не согласен в корне.
Если исключить случай реализации какого-то специфичного алгоритма писать на подобных языках - легче застрелиться.

Программисты в первую очередь ленивы по природе и мучать себя синтаксисом ни в коем случае не будут. И лень тут нужно рассматривать в самом положительном аспекте. Т.е. инструмент (а язык - это в первую очередь инструмент) должен быть на столько удобным, чтобы его не замечать. Я, например могу спокойно думать не напрягаясь на C-подобных языках, остальные требуют усилий.
В итоге: эволюция доказала, что промышленные языки должны обладать именно С-подобным синтаксисом. Все остальное удел узких задач.
Vzlomka 01-01-2007-19:41 удалить
Baks256, Не обязательно, но просто то, что хоть изредка мне будет понятно:)
Baks256 01-01-2007-21:34 удалить
_Linx_, ты просто не поисал на подобныйх языках. конечно, lisp это не удобный язык. во функциональное программирование в целом это вещь.

представь как удобно было вы использовать такую запись

int sum = Count(int x, int y : Matrix[x][y] != 0)

такая запись, к примеру, подсчитает кол-во ненулевых элементов матрицы.

по-моему очень удобно. и как раз для таких лентяев как ты ;)
02-01-2007-00:01 удалить
Baks256, я понимаю, да. В нашем языке тоже выражения инфиксно записываются. Просто до этого мы реализовывали свою виртуальную машину, ассемблер для неё, писали перевод выражения из инфиксной записи в постфикную и подсчёт постфиксной. А собрать всё воедино легче было)

Кстати тоже, когда писали перевод из постфиксной в инфиксную с минимальной расстановкой скобок, дерево реализовывали)

И я, кстати, знаком с функциональным программироваинием, прошёл курс молодого бойца на OCAML (в sulci копался) и F# (сосед заинтриговал, эфшарп, мол, эфшарп)...
Baks256 02-01-2007-00:14 удалить
Apprentice, а у меня вот времени на F# нету.. но обязателньо заценю в ближайшее время..
_Linx_ 02-01-2007-17:17 удалить
Ну и что такого ты написал нового? Тут простое использование предикатов... Это уже есть в спецификациях как С# так и Java будущих версий. Узко... Узко применение вот о чем я хотел сказать...
Baks256 02-01-2007-18:57 удалить
_Linx_, узко мыслиш, дорогой товарищ. :)

функционально и рекурсивно-логическое ЗНАЧИТЕЛЬНО удобнее при написании И.И.
просто сы привыкли к нашему ооп и не хотим от него отходить не на шаг.

НО!!! если ты попробуешь позаниматься этим вопросом, я уверен, что ты для себя много чего нового откроешь. это позволит по-новому взглянуть на ооп.
_Linx_ 03-01-2007-08:31 удалить
Признаться много кода с использованием парадигм рек. логической и функциональной мне не довелось видеть. И все же я считаю, что ИИ и прочее лишь класс алгоритмов, которые удобно реализовывать с помощью этих парадигм. Не более того.
Я против фразы, что все программисты будут стремится к этому. Это далеко не идеал. Это всего лишь красивое решение узкого круга задач.
А уж если ты затронул ООП - то вот как раз эта парадигма претендует на универсальность.
Baks256 03-01-2007-13:21 удалить
_Linx_, ООП не даёт многих возможностей фп и рлп. поэтому я считаю, что надо в ооп зсунуть приблуду фп и рлп.. но это не так то просто..

а ИИ это не такая уж и узкая обл.
Ты не прав! мне например програмирование очень нужно! Ибо это моя спецуха)

LI 5.09.15
_TT_ 19-05-2007-00:53 удалить
Поддерживаю _Linx_. Объектно-ориентированные языки - это то, на чем стоит на сегодняшний день 99% всего прикладного ПО. Это факт и от этого никуда не деться. Да, Фортран даст выигрыш в производительности (и весьма значительный!) в вычислительных задачах. Да, с помощью Lisp-подобных языков, быстрее пишутся трансляторы. Но ребята... Попробуйте на этом написать хотя бы простенькую программку для конечного пользователя. Это же абсолютно нечитабельно! Код должен постоянно сопровождаться и поддерживаться. А как этого добиться если больше времени тратишь на осознание того, что ты написал? А если писал не ты? А как обстоят дела со средами разработки и компиляторами под эти языки? А ведь народ сейчас переходит на VS только потому что Borland после выпуска BDS 2006 объявила о том, что больше не будет поддерживать компиляторы и инструменты разработки. Ну не паровоз она сама себе! А то, что .NET гряде - это факт. Так что если уж нужна красота кода такой ценой, имхо лучше писать библиотеки, который потом будут стыковаться с прогами, написанными на общем языке. ;)
_TT_ 19-05-2007-00:55 удалить
Кстати, идея ИИ, имхо, себя уже исчерпала :)


Комментарии (20): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник функциональное программирование | Baks256 - для вас :) | Лента друзей Baks256 / Полная версия Добавить в друзья Страницы: раньше»