- 1
append x = foldr (map (:) x) id
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+116
append x = foldr (map (:) x) id
HaskellGovno 21.05.2012 08:45 # −2
bormand 21.05.2012 08:55 # +7
HaskellGovno 21.05.2012 09:38 # −2
TheHamstertamer 21.05.2012 16:06 # +3
bormand 21.05.2012 16:44 # +2
roman-kashitsyn 21.05.2012 16:52 # +1
Вспомнилась глава про изображения из SICP
TheHamstertamer 21.05.2012 16:58 # +2
guest 21.05.2012 23:14 # 0
HaskellGovno 21.05.2012 23:37 # −3
Код украсть захотел...
guest 21.05.2012 23:44 # +6
И буду загребать бабло!!1
bormand 22.05.2012 05:20 # +2
Vasiliy 22.05.2012 09:55 # 0
HaskellGovno 22.05.2012 09:55 # 0
Как в функцию map, принимающую один аргумент, передают функцию (:) принимающую 2 аргумента?
roman-kashitsyn 22.05.2012 10:00 # +1
TarasB 22.05.2012 10:13 # 0
Тогда как это может быть первым аргумертом foldr?
roman-kashitsyn 22.05.2012 10:36 # 0
HaskellGovno 22.05.2012 10:41 # 0
Он считает, что компилируется:
roman-kashitsyn 22.05.2012 10:48 # 0
Там же написан более приятный вариант
HaskellGovno 22.05.2012 10:53 # 0
>Там же написан более приятный вариант
>append = flip $ foldr (:)
Ты что не видиш, что это совсем другое. Этот вариант не один элемент x присобачивает, а много append [1..5] [2..5]
http://ideone.com/9QiLS
roman-kashitsyn 22.05.2012 10:58 # 0
HaskellGovno 22.05.2012 11:04 # 0
guest 22.05.2012 17:18 # +1
ну адаптируй, flip теперь не нужен (первый аргумент в конец): foldr (:) . (:[])
HaskellGovno 22.05.2012 10:43 # 0
> (:) x
Больше похоже, что x вторым параметром для map передаётся. А частичное применение делается так: (:x)
roman-kashitsyn 22.05.2012 10:55 # +1
На самом деле благодаря каррированию все функции в хаскеле - функции одного аргумента. (:) - функция одного аргумента, возвращающая при частичном применении другую функцию. Поэтому x должен быть списком. В результате (map (:) x) будет порождать список функций, принимающих на вход список, и возвращающих список, что и отражено в типе [[a]->[a]]. Эти функции будут приклеивать разные элементы из x.
HaskellGovno 22.05.2012 10:59 # 0
HaskellGovno 22.05.2012 11:03 # 0
А вот такая генерация списка функций - это на времени компиляции и на производительности кода не сказывается?
roman-kashitsyn 22.05.2012 11:18 # 0
guest 22.05.2012 15:17 # 0
http://fmapfixreturn.wordpress.com/2008/07/09/comonads-in-everyday-life/
Поднимают (и решают) такую проблему:
"So anyway, you’re describing the structure of your website twice, in perhaps very different formats"