9 Страницы « < 7 8 9  
Ответить Создать тему

Функциональное программирование

jem
post Feb 8 2013, 13:28 
Отправлено #121


Активный

Сообщений: 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.
Profile CardPM
  0/0  
Imp
post Feb 8 2013, 16:47 
Отправлено #122


Ъ

Сообщений: 4 518
Из: Пуэрто-Принцеса



Цитата(jem @ Feb 8 2013, 14:28)
Ну дык, в том и фишка, чтобы использовать функциональный (рекурсивный) тип и на каждой итерации иметь константное время доступа. В данном случае ведь так и есть.
*

А с массивами чем время не константное? О(1) же доступ по индексу smile3.gif плюс можно иметь гарантии прямоугольности матрицы smile3.gif Для этой операции не существенно но вообще с матрицами как то random access больше катит.
Profile CardPM
  0/0  
jem
post Feb 8 2013, 19:17 
Отправлено #123


Активный

Сообщений: 4 908



Цитата(Imp @ Feb 8 2013, 17:47)
А с массивами чем время не константное? О(1) же доступ по индексу
*

С массивами все понятно. Я о другом. Имеется ввиду, что некошерно как-то с ними работать в чисто функциональном языке smile3.gif

Цитата(Imp @ Feb 8 2013, 17:47)
Для этой операции не существенно но вообще с матрицами как то random access больше катит.
*

Я вот хочу попробовать реализовать в функциональном стиле всякие разложения и прочие отражения-вращения. И сравнить по эффективности с классическим подходом smile3.gif

--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
Profile CardPM
  0/0  
Imp
post Feb 8 2013, 21:40 
Отправлено #124


Ъ

Сообщений: 4 518
Из: Пуэрто-Принцеса



Цитата(jem @ Feb 8 2013, 20:17)
С массивами все понятно. Я о другом. Имеется ввиду, что некошерно как-то с ними работать в чисто функциональном языке smile3.gif
*

Некошерны только массивы с изменениями in-place. Иммутабельные же массивы с copy-on-write вполне кошерны. В качестве компромисса можно юзать мутабельные в монаде ST. Хотя для матриц мутабельность особо ни к чему.
Цитата(jem @ Feb 8 2013, 20:17)
Я вот хочу попробовать реализовать в функциональном стиле всякие разложения и прочие отражения-вращения. И сравнить по эффективности с классическим подходом smile3.gif
*

Ну вперед, посмотрим че получится. Okasaki "Purely Functional Data Structures" уже прочитал? Если нет то советую.

Сообщение отредактировал Imp - Feb 8 2013, 21:48
Profile CardPM
  0/0  
jem
post Feb 8 2013, 23:02 
Отправлено #125


Активный

Сообщений: 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.
Profile CardPM
  0/0  
Imp
post Feb 8 2013, 23:16 
Отправлено #126


Ъ

Сообщений: 4 518
Из: Пуэрто-Принцеса



Цитата(jem @ Feb 9 2013, 00:02)
Давно и выборочно. И если честно, не совсем понимаю, как она может мне пригодиться.
*

Ну там насколько я помню были чистые random-access списки, правда вроде без реализации но с полезными ссылками. А вообще у него были в другой статье эффективные IntMap которые как раз для этой задачи могут подойти, ведь матрицу можно представить и как map из пары координат в значение.
Profile CardPM
  0/0  
jem
post Feb 9 2013, 01:49 
Отправлено #127


Активный

Сообщений: 4 908



Цитата(jem @ Feb 9 2013, 00:02)
метод Гаусса
*

Это, кстати, уже было здесь. Нужно бы только проинспектировать этот код, на предмет упрощения.

Цитата(Imp @ Feb 9 2013, 00:16)
Ну там насколько я помню были чистые random-access списки, правда вроде без реализации но с полезными ссылками. А вообще у него были в другой статье эффективные IntMap которые как раз для этой задачи могут подойти, ведь матрицу можно представить и как map из пары координат в значение.
*

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

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

ЗЫ. Вообще математика сильная вещь smile3.gif Я припоминаю такую идею (детали уже не помню и не помню у кого это было, может быть, как раз у Окасаки), когда на паре-тройке функциональных типов (что-то типа единицы, размеченного объединения, декартова произведения) определяется дифференциальное исчисление и потом как результат дифференцирования списка получается двусвязный список или, что в общем то же самое, - зиппер. Это как какая-то магия выглядит.


--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
Profile CardPM
  0/0  
Witt-CG
post Feb 21 2013, 19:27 
Отправлено #128


Постоялец

Сообщений: 350



Цитата(jem @ Mar 17 2010, 19:53)
"монада - это моноид в категории эндофункторов, какие проблемы-то" smile3.gif
*

Как потом с быдлокодерами общаться? smile3.gif

Монады в IRL применимы?
Если монада позволяет sideeffect, то чистые функции станут не совсем чистыми?
Не есть ли это невыполненная грязная функция, как возвращенный результат выполнения чистой функции?
Просветлите быдлокодера. ФП интересно, но только практическое. Почитал sicp - нету там никаких монад. smile3.gif
Profile CardPM
  0/0  
jem
post Feb 22 2013, 15:16 
Отправлено #129


Активный

Сообщений: 4 908



Цитата(Witt-CG @ Feb 21 2013, 20:27)
Как потом с быдлокодерами общаться?
*

Не знаю, нужно у Уодлера спросить smile3.gif

Цитата(Witt-CG @ Feb 21 2013, 20:27)
Монады в IRL применимы?
*

Они применимы в чистых функциональных языках.

--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
Profile CardPM
  0/0  
jem
post Mar 5 2013, 12:25 
Отправлено #130


Активный

Сообщений: 4 908



Witt-CG, кстати, о птичках. При знакомстве с монадами можно было бы проводить параллель с моноидом. Людям с ВО из курса общей алгебры, по идее, должны быть знакомы полугруппы с нейтральным элементом и очевидна польза свойств этой абстракции в программировании. Легче было бы сделать переход от моноида к монаде.

--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
Profile CardPM
  0/0  
Witt-CG
post Mar 8 2013, 00:24 
Отправлено #131


Постоялец

Сообщений: 350



Цитата(jem @ Mar 5 2013, 13:25)
Witt-CG, кстати, о птичках. При знакомстве с монадами можно было бы проводить параллель с моноидом.
*

Рекурсивно smile3.gif
Если я что-то понял (или не понял) - это цепочка чистых ленивых функций,
на концах которой могут быть также ленивые функции с side-эффектом.
Из объяснений про абстрактные множества и отображения - не понятен прикладной смысл.
Profile CardPM
  0/0  
Imp
post Mar 8 2013, 00:53 
Отправлено #132


Ъ

Сообщений: 4 518
Из: Пуэрто-Принцеса



Цитата(Witt-CG @ Mar 8 2013, 01:24)
Рекурсивно  smile3.gif
Если я что-то понял (или не понял) - это цепочка чистых ленивых функций,
на концах которой могут быть также ленивые функции с side-эффектом.
Из объяснений про абстрактные множества и отображения - не понятен прикладной смысл.
*

Ленивость вообще не при чем тут, ленивость же на результат не влияет, только на быстродействие. А монады не рушат чистоту, они же не выполняют сайд-эффекты, а описывают их трансформации. А реально сайд эффекты выполняет runtime, который собственно и вычисляет программу которая по сути есть просто функция. Но runtime находится как бы вовне по отношению к программе. А если наравится dataflow стиль, то лучше юзать arrows вместо монад.
Profile CardPM
  0/0  
SeaEng
post Jan 6 2017, 20:38 
Отправлено #133


Активный

Сообщений: 3 310



Такой вопрос ... что можно было бы прочитать, чтобы освежить знания? Перехожу с императивного мышления на функциональное (Scala, Haskell) ... и вся школьная и не школьная математика напрочь позабылась. Есть какой-то краткий гайд по функциям, полугруппам, обязательные качества монад, моноидов и прочее
Profile CardPM
  0/0  
jem
post Jan 10 2017, 12:28 
Отправлено #134


Активный

Сообщений: 4 908



Цитата(Sergey Grigorev @ Jan 6 2017, 20:38)
Такой вопрос ... что можно было бы прочитать, чтобы освежить знания? Перехожу с императивного мышления на функциональное (Scala, Haskell) ... и вся школьная и не школьная математика напрочь позабылась. Есть какой-то краткий гайд по функциям, полугруппам, обязательные качества монад, моноидов и прочее
*

Оставлю свои пару копеек, раз больше никто не отвечает. Краткий гайд - википедия. Вообще, для успешного кодирования это все не особо требуется, оно пожалуй нужно только для общего развития и более глубокого понимания (ИМХО, в процессе это понимание все равно само придет), и для общения с такими же учеными smile3.gif. Но если интересно, то моноиды и прочие группы/полугруппы/поля/кольца ищите в общей алгебре, а монады/функторы и прочие стрелки - в теории категорий, заодно стоит познакомиться с лямбда-исчислением, комбинаторной логикой (это даже интереснее чем всякие алгебраические абстракции).

--------------------
C, Clojure(Script), Common Lisp, ECMAScript, Haskell, Java, Lua, Perl, PL/SQL, Python, Scala, SQL, Transact-SQL.
Profile CardPM
  0/+1  

9 Страницы « < 7 8 9
ОтветитьTopic Options
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
Быстрый ответ
Кнопки кодов
 Расширенный режим
 Нормальный режим
    Закрыть все тэги


Открытых тэгов: 
Введите сообщение
Смайлики
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
         
Показать все

Опции сообщения