metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-10-11 10:17 am

Доизучался ФП

Кусок проги на C#

//фактически, мы делаем следующее: из конструктора/инициализатора с N параметрами мы
//делаем его же(хотя формально это уже не конструктор, а просто функция), но с нулем
//параметров, методом замыкания N параметров конструктора на локальные переменные
//в анонимном делегате.
public delegate T UIStateConstructor<T>() where T:UIStateBase;
public delegate T UIResourceConstructor<T>() where T:class;

Жаль, фреймворк не 3.5, там подобные штуки делать проще стало, менее многословно.

Боюсь прослыть невежей, но всё же...

[identity profile] zelanton.livejournal.com 2009-10-11 08:50 am (UTC)(link)
а что подразумевается под "ФП", упомянутой в заголовке?

Re: Боюсь прослыть невежей, но всё же...

[identity profile] metaclass.livejournal.com 2009-10-11 08:59 am (UTC)(link)
Функциональное программирование. Всю эту пакость с параметрическими типами, замыканиями и функциями высшего порядка я нормально осилил только после изучения функциональной парадигмы, откуда оно заимствовано.

Re: Боюсь прослыть невежей, но всё же...

[identity profile] zelanton.livejournal.com 2009-10-11 09:19 am (UTC)(link)
Захотелось взглянуть. С чего начать ознакомление порекомендуете?

Re: Боюсь прослыть невежей, но всё же...

[identity profile] metaclass.livejournal.com 2009-10-11 09:30 am (UTC)(link)
Сначала отсюда, видимо:
http://www.rsdn.ru/article/funcprog/fp.xml
http://www.rsdn.ru/article/dotnet/LinqAsStapToFp.xml
http://www.rsdn.ru/summary/3857.xml

а потом наверно
http://www.rsdn.ru/article/haskell/haskell_part1.xml
http://www.rsdn.ru/article/haskell/haskell_part2.xml

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

Re: Боюсь прослыть невежей, но всё же...

[identity profile] alexott.livejournal.com 2009-10-11 12:38 pm (UTC)(link)
F# бери - там интеграция с .Net нормальная...

Re: Боюсь прослыть невежей, но всё же...

[identity profile] alexott.livejournal.com 2009-10-11 12:37 pm (UTC)(link)
http://code.google.com/p/funprog-ru/ - в качестве введения. а потом можно взять F#. Хотя хаскель более чистый ФЯ

[identity profile] kiryl.livejournal.com 2009-10-11 09:05 am (UTC)(link)
Комментарии на русском? Или это специальный перевод для ЖЖ.

[identity profile] metaclass.livejournal.com 2009-10-11 09:08 am (UTC)(link)
Да, на русском. В белорусском языке нет нужной терминологии, ога.

[identity profile] kiryl.livejournal.com 2009-10-11 09:12 am (UTC)(link)
Как всё запущено...

[identity profile] thedeemon.livejournal.com 2009-10-11 09:37 am (UTC)(link)
Только тут почти вся терминология английская русскими буквами. :)

[identity profile] blackyblack.livejournal.com 2009-10-12 06:29 am (UTC)(link)
Вот что меня убивает в ФП, так это 10 строк комментария на одну строку кода. И причина то в общем ясна, а осадок всё равно неприятный.

Кстати, я такого рода комменты пишу человеческим языком, хотя и получается гораздо многословнее. А то автобус собьёт и никто в коде уже не разберется :)

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-10-12 08:06 am (UTC)(link)
А не приходилось наблюдать исходники на делфах, где каждой строчке примитивного кода предшествовало несколько строк комментов? :)

Так шта ФП здесь как всегда не причём. :)

[identity profile] blackyblack.livejournal.com 2009-10-12 08:33 am (UTC)(link)
Ну комментировать каждую строку кода это патология и особенности обучения. :)
А вот ФП всё-таки причём, потому что когда видишь функцию filter_exit_map и пытаешься понять, что же она делает, а внутри оказывается какой-нибудь комбинатор, то без комментариев приходится туго, а с комментариями не лучше потому что нужна или ссылка на статью про комбинаторы или описание человеческим языком, что происходит.

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-10-12 09:23 am (UTC)(link)
Точно точно.
Некоторые граждане до сих пор switch с признаком типа используют.
А когда видят двойную передачу впадают в ступор и кричат "чур меня".
Некоторые, правда, обретают кратковременное просветление при отсылке к авторитетным источникам. :)

[identity profile] metaclass.livejournal.com 2009-10-12 09:31 am (UTC)(link)
А что такое "switch с признаком типа" и "двойная передача"? :)

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-10-12 09:44 am (UTC)(link)
Двойная передача (Double dispatch): http://en.wikipedia.org/wiki/Double_dispatch.

switch с признаком типа - это когда каженному типу в иерархии присваивается номерочек, и тогда в любом месте, где приходит ссылка на экземпляр базового класса мы этот номерочик проверяем и кастимся к нужному типу...
Короче такой рукопашный визитер (Visitor): http://en.wikipedia.org/wiki/Visitor_pattern