Продам - трехкомнатную квартиру, Водопроводная, 20 (Жилой дом, 6-8 эт) - 13 600 000 р. |
Продам - двухкомнатную квартиру, Кадыкова, 22 (Жилой дом, 9 эт) - 4 900 000 р. |
Продам - таунхаус, с. Шоршелы (Мариинско-Посадский район), Луговая-ШРШ - 3 500 000 р. |
Продам - пятикомнатную квартиру, Строителей, 44 (Жилой дом, 5 эт) - 5 500 000 р. |
|
|
Функциональное программирование
•
jem
|
|
Активный
Сообщений: 4 908
|
Цитата(Imp @ Feb 8 2013, 13:34) Ну вот я басню подсократил за счет синтаксического сахара Так лучше, ага. Цитата(Imp @ Feb 8 2013, 13:34) Но вряд ли матрицы стоит реализовывать в виде списков, лучше массивы взять как базовую структуру имхо или свой тип забахать позволяющий нелинейный доступ. Ну дык, в том и фишка, чтобы использовать функциональный (рекурсивный) тип и на каждой итерации иметь константное время доступа. В данном случае ведь так и есть.
--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
|
|
|
|
•
Imp
|
|
Ъ
Сообщений: 4 518
Из: Пуэрто-Принцеса
|
Цитата(jem @ Feb 8 2013, 14:28) Ну дык, в том и фишка, чтобы использовать функциональный (рекурсивный) тип и на каждой итерации иметь константное время доступа. В данном случае ведь так и есть. А с массивами чем время не константное? О(1) же доступ по индексу плюс можно иметь гарантии прямоугольности матрицы Для этой операции не существенно но вообще с матрицами как то random access больше катит.
|
|
|
|
•
jem
|
|
Активный
Сообщений: 4 908
|
Цитата(Imp @ Feb 8 2013, 17:47) А с массивами чем время не константное? О(1) же доступ по индексу С массивами все понятно. Я о другом. Имеется ввиду, что некошерно как-то с ними работать в чисто функциональном языке Цитата(Imp @ Feb 8 2013, 17:47) Для этой операции не существенно но вообще с матрицами как то random access больше катит. Я вот хочу попробовать реализовать в функциональном стиле всякие разложения и прочие отражения-вращения. И сравнить по эффективности с классическим подходом
--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
|
|
|
|
•
Imp
|
|
Ъ
Сообщений: 4 518
Из: Пуэрто-Принцеса
|
Цитата(jem @ Feb 8 2013, 20:17) С массивами все понятно. Я о другом. Имеется ввиду, что некошерно как-то с ними работать в чисто функциональном языке Некошерны только массивы с изменениями in-place. Иммутабельные же массивы с copy-on-write вполне кошерны. В качестве компромисса можно юзать мутабельные в монаде ST. Хотя для матриц мутабельность особо ни к чему. Цитата(jem @ Feb 8 2013, 20:17) Я вот хочу попробовать реализовать в функциональном стиле всякие разложения и прочие отражения-вращения. И сравнить по эффективности с классическим подходом Ну вперед, посмотрим че получится. Okasaki "Purely Functional Data Structures" уже прочитал? Если нет то советую. Сообщение отредактировал Imp - Feb 8 2013, 21:48
|
|
|
|
•
jem
|
|
Активный
Сообщений: 4 908
|
Цитата(Imp @ Feb 8 2013, 22:40) Некошерны только массивы с изменениями in-place. Ну может быть. Цитата(Imp @ Feb 8 2013, 22:40) Ну вперед, посмотрим че получится. А ничего особенного не будет. Меня интересуют: модификация QR-разложения; вращение Гивенса; вероятно, смесь вращения Гивенса и гиперболического вращения; метод Гаусса, точнее его часть. Цитата(Imp @ Feb 8 2013, 22:40) Okasaki "Purely Functional Data Structures" уже прочитал? Давно и выборочно. И если честно, не совсем понимаю, как она может мне пригодиться.
--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
|
|
|
|
•
Imp
|
|
Ъ
Сообщений: 4 518
Из: Пуэрто-Принцеса
|
Цитата(jem @ Feb 9 2013, 00:02) Давно и выборочно. И если честно, не совсем понимаю, как она может мне пригодиться. Ну там насколько я помню были чистые random-access списки, правда вроде без реализации но с полезными ссылками. А вообще у него были в другой статье эффективные IntMap которые как раз для этой задачи могут подойти, ведь матрицу можно представить и как map из пары координат в значение.
|
|
|
|
•
jem
|
|
Активный
Сообщений: 4 908
|
Цитата(jem @ Feb 9 2013, 00:02) Это, кстати, уже было здесь. Нужно бы только проинспектировать этот код, на предмет упрощения. Цитата(Imp @ Feb 9 2013, 00:16) Ну там насколько я помню были чистые random-access списки, правда вроде без реализации но с полезными ссылками. А вообще у него были в другой статье эффективные IntMap которые как раз для этой задачи могут подойти, ведь матрицу можно представить и как map из пары координат в значение. Я оттуда зиппер только запомнил. В принципе да, он мне дал понимание, как можно работать с рекурсивными типами и поэтому я, собственно, и считаю, что для матричных вычислений можно использовать списки, и примеры пока это только подтверждают. Т.е., произвольный доступ не так уж и нужен, просто нужно вычислять там, где в данный момент находится замок молнии. С картами идея хорошая, ага. Но я что-то сходу не могу представить, как для реализации, например, на деревьях можно получить время доступа лучше, чем логарифмическое. Но это, конечно, все равно лучше линейного. В любом случае нужно будет посмотреть этот букварь, спасибо, что напомнили. ЗЫ. Вообще математика сильная вещь Я припоминаю такую идею (детали уже не помню и не помню у кого это было, может быть, как раз у Окасаки), когда на паре-тройке функциональных типов (что-то типа единицы, размеченного объединения, декартова произведения) определяется дифференциальное исчисление и потом как результат дифференцирования списка получается двусвязный список или, что в общем то же самое, - зиппер. Это как какая-то магия выглядит.
--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
|
|
|
|
•
Witt-CG
|
|
Постоялец
Сообщений: 350
|
Цитата(jem @ Mar 17 2010, 19:53) "монада - это моноид в категории эндофункторов, какие проблемы-то" Как потом с быдлокодерами общаться? Монады в IRL применимы? Если монада позволяет sideeffect, то чистые функции станут не совсем чистыми? Не есть ли это невыполненная грязная функция, как возвращенный результат выполнения чистой функции? Просветлите быдлокодера. ФП интересно, но только практическое. Почитал sicp - нету там никаких монад.
|
|
|
|
•
jem
|
|
Активный
Сообщений: 4 908
|
Цитата(Witt-CG @ Feb 21 2013, 20:27) Как потом с быдлокодерами общаться? Не знаю, нужно у Уодлера спросить Цитата(Witt-CG @ Feb 21 2013, 20:27) Они применимы в чистых функциональных языках.
--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
|
|
|
|
•
jem
|
|
Активный
Сообщений: 4 908
|
Witt-CG, кстати, о птичках. При знакомстве с монадами можно было бы проводить параллель с моноидом. Людям с ВО из курса общей алгебры, по идее, должны быть знакомы полугруппы с нейтральным элементом и очевидна польза свойств этой абстракции в программировании. Легче было бы сделать переход от моноида к монаде.
--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
|
|
|
|
•
Witt-CG
|
|
Постоялец
Сообщений: 350
|
Цитата(jem @ Mar 5 2013, 13:25) Witt-CG, кстати, о птичках. При знакомстве с монадами можно было бы проводить параллель с моноидом. Рекурсивно Если я что-то понял (или не понял) - это цепочка чистых ленивых функций, на концах которой могут быть также ленивые функции с side-эффектом. Из объяснений про абстрактные множества и отображения - не понятен прикладной смысл.
|
|
|
|
•
Imp
|
|
Ъ
Сообщений: 4 518
Из: Пуэрто-Принцеса
|
Цитата(Witt-CG @ Mar 8 2013, 01:24) Рекурсивно Если я что-то понял (или не понял) - это цепочка чистых ленивых функций, на концах которой могут быть также ленивые функции с side-эффектом. Из объяснений про абстрактные множества и отображения - не понятен прикладной смысл. Ленивость вообще не при чем тут, ленивость же на результат не влияет, только на быстродействие. А монады не рушат чистоту, они же не выполняют сайд-эффекты, а описывают их трансформации. А реально сайд эффекты выполняет runtime, который собственно и вычисляет программу которая по сути есть просто функция. Но runtime находится как бы вовне по отношению к программе. А если наравится dataflow стиль, то лучше юзать arrows вместо монад.
|
|
|
|
•
SeaEng
|
|
Активный
Сообщений: 3 310
|
Такой вопрос ... что можно было бы прочитать, чтобы освежить знания? Перехожу с императивного мышления на функциональное (Scala, Haskell) ... и вся школьная и не школьная математика напрочь позабылась. Есть какой-то краткий гайд по функциям, полугруппам, обязательные качества монад, моноидов и прочее
|
|
|
|
•
jem
|
|
Активный
Сообщений: 4 908
|
Цитата(Sergey Grigorev @ Jan 6 2017, 20:38) Такой вопрос ... что можно было бы прочитать, чтобы освежить знания? Перехожу с императивного мышления на функциональное (Scala, Haskell) ... и вся школьная и не школьная математика напрочь позабылась. Есть какой-то краткий гайд по функциям, полугруппам, обязательные качества монад, моноидов и прочее Оставлю свои пару копеек, раз больше никто не отвечает. Краткий гайд - википедия. Вообще, для успешного кодирования это все не особо требуется, оно пожалуй нужно только для общего развития и более глубокого понимания (ИМХО, в процессе это понимание все равно само придет), и для общения с такими же учеными . Но если интересно, то моноиды и прочие группы/полугруппы/поля/кольца ищите в общей алгебре, а монады/функторы и прочие стрелки - в теории категорий, заодно стоит познакомиться с лямбда-исчислением, комбинаторной логикой (это даже интереснее чем всякие алгебраические абстракции).
--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
|
|
|
|
|
|
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
|