- 1
- 2
- 3
- 4
- 5
- 6
- 7
only :: (Integral nt) => nt -> [Bool]
only n = [ x `mod` n == 0 | x <- [0..] ]
each :: (Integral nt) => nt -> [a] -> [a]
each n xs = [ snd x | x <- filter fst $ zip (only n) xs ]
main = do print $ each 2 [1,2,3,4,5,6,7,8,9]
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−82
only :: (Integral nt) => nt -> [Bool]
only n = [ x `mod` n == 0 | x <- [0..] ]
each :: (Integral nt) => nt -> [a] -> [a]
each n xs = [ snd x | x <- filter fst $ zip (only n) xs ]
main = do print $ each 2 [1,2,3,4,5,6,7,8,9]
Haskell. Получение каждого n-го элемента списка.
serpinski 05.11.2012 00:49 # +1
LispGovno 05.11.2012 00:53 # +1
Fai 05.11.2012 01:09 # +1
Если нет, прошу пояснить.
LispGovno 05.11.2012 02:26 # +2
Fai 05.11.2012 02:30 # +2
LispGovno 05.11.2012 00:55 # +2
unu-foja 05.11.2012 00:57 # +3
Fai 05.11.2012 01:01 # +1
LispGovno 05.11.2012 01:02 # +2
http://ideone.com/fo8esL
unu-foja 05.11.2012 01:03 # +3
LispGovno 05.11.2012 01:06 # 0
LispGovno 05.11.2012 01:04 # +1
http://ideone.com/wXzfi8
Fai 05.11.2012 01:12 # +2
LispGovno 05.11.2012 01:16 # +2
Ниже исправил это кощунство:
http://govnokod.ru/12056#comment158782
Fai 05.11.2012 01:22 # +2
LispGovno 05.11.2012 00:58 # 0
Лол, что ты написал? Почему у тебя первый элемент списка считается энным?
http://ideone.com/2GtgDK
unu-foja 05.11.2012 01:02 # +3
кэп намекает, что в списках хаскеля индексирование принято с 0
LispGovno 05.11.2012 01:10 # +2
http://ideone.com/YpEGDB
roman-kashitsyn 05.11.2012 01:28 # +4
почему не Где хвалёные навыки паттерн-матчинга
LispGovno 05.11.2012 01:44 # +1
Fai 05.11.2012 01:33 # +4
Нормально?
roman-kashitsyn 05.11.2012 01:37 # +4
unu-foja 05.11.2012 16:51 # +4
LispGovno 05.11.2012 01:37 # +3
Ага, годнота.
LispGovno 05.11.2012 01:41 # +3
http://ideone.com/bjbH3A
Fai 05.11.2012 01:48 # +2
upd: вижу. Он не может узнать, что за тип у списка при передаче пустого.
Fai 05.11.2012 01:57 # +1
each :: Int -> [a] -> [a] - не работает!
Получается нужно явно указывать тип "a" или при использовании писать (each 1 []) :: Type.
Криво.
LispGovno 05.11.2012 02:09 # +2
Должно быть как-то так, но это не правильно скорее всего, поэтому ждем какого-нибудь Хацкелиста.
Fai 05.11.2012 02:27 # +2
http://ideone.com/4vi9eJ
roman-kashitsyn 05.11.2012 10:15 # +4
На самом деле, это не такая уж большая проблема, т.к. явно передавать пустой список мало кому нужно: обычно они возникают в процессе обработки, и его "тип" известен. не работает, т.к. print вызывает полиморфную функцию show, а для пустого списка непонятно, что вызывать. Поэтому нужно явно указывать тип пустого списка.
Fai 05.11.2012 01:18 # +1
> в списках хаскеля индексирование принято с 0
Именно.
LispGovno 05.11.2012 01:20 # 0
Fai 05.11.2012 01:40 # +1
А т.к. 0 делится на n* априори, берётся и он.
* Исключая n = 0
LispGovno 05.11.2012 02:41 # +2
Только что-то не компилится тоже:
http://ideone.com/lyFejA
Fai 05.11.2012 02:56 # +2
Fai 05.11.2012 03:00 # +2
Fai 05.11.2012 03:15 # +2
each n xs = zipWith (!!) (repeat xs) [0, n.. len xs - 1]
Проблема была в том, что оператор !! применим только как (массив!!индекс), а он применялся как (значение_массива!!индекс).
Так что приходится делать repeat(xs) для получения списка. Но есть вариант получше:
http://ideone.com/Sc3KOY
Вот он чемпион читабельности!
Fai 05.11.2012 03:28 # +2
LispGovno 05.11.2012 03:31 # +1
Эка я протупил.
>Вот он чемпион читабельности!
И вот и ты уже не спишь... Хаскель не нужен)))
Только есть одна проблема. Этот чемпион не может в бесконечные списки, так что не вариант. Подозреваю, что и производительность из-за !! оставляет желать лучшего.
Fai 05.11.2012 03:26 # +2
USB 05.11.2012 03:39 # +4
LispGovno 05.11.2012 03:43 # +3
Пока это самый очевидный и самый правильный вариант, если сигнатурку типов поправить
Fai 05.11.2012 03:46 # +2
Немного короче, более понятная в правой части и менее понятная в левой. Хотя кому-как.
LispGovno 05.11.2012 03:50 # +2
Fai 05.11.2012 03:53 # +2
LispGovno 05.11.2012 03:56 # +2
Ага, не стало лучше...
Fai 05.11.2012 04:03 # +3
С одной стороны читается лучше и запись короче, с другой стороны обосрут же если первый элемент через head получать, а не через патерн-матчинг.
upd: Кстати, есть мыло, аська, скайп для вопросов по ФП? Говнокод всё-таки не для этого.
LispGovno 05.11.2012 04:05 # 0
Fai 05.11.2012 04:11 # +2
each _ [] = []
LispGovno 05.11.2012 04:13 # 0
Fai 05.11.2012 03:50 # +2
Я уже выяснил, что можно не править. Проблема всё-таки в функции print которая не знает как вывести пустой список.
main = print [] -- Ошибка
LispGovno 05.11.2012 03:51 # +1
Костыль же вроде?
upd: Хотя наверное ты прав.
upd2:Ты обновил пост. Инфа не актуальна.
Fai 05.11.2012 03:54 # +2
Vindicar 05.11.2012 11:01 # +3
TarasB 05.11.2012 11:03 # +4
roman-kashitsyn 05.11.2012 11:05 # +6
Vindicar 05.11.2012 13:13 # +1
Если надо больше, то придется делать всё самому.
LispGovno 05.11.2012 13:21 # +1
Vindicar 05.11.2012 13:29 # +3
LispGovno 05.11.2012 13:47 # +2
LispGovno 05.11.2012 13:45 # 0
Эти сказки можно рассказывать только ньюфагам, чтобы затащить в функциональщину.
На деле список очень даже конечный. Притом предсказть конец бесконечного списка весьма не просто. Ты никогда не можешь быть уверен наверняка, что для обработи данной задачи тебе хватит объёмов памяти.
Fai 05.11.2012 14:39 # +3
LispGovno 05.11.2012 15:05 # +2
bormand 05.11.2012 15:27 # +2
А зачем? Все равно ты не будешь использовать весь этот список, а возьмешь для вывода\сохранения только нужную его часть.
На самом деле бесконечный список довольно удобная абстракция, сокращающая код - не надо писать отдельный случай для пустого списка. Я так писал Метод Наименьших Квадратов, который строит бесконечные вектора и матрицы, сводит к треугольному виду бесконечную систему уравнений, и выводит ответ нужной размерности... Если интересно - могу выложить.
LispGovno 05.11.2012 15:29 # +3
bormand 05.11.2012 15:34 # +2
Если же список бесконечен - то код упрощается:
Fai 25.11.2012 09:37 # +1
LispGovno 25.11.2012 15:11 # 0
Fai 25.11.2012 19:55 # 0
LispGovno 25.11.2012 20:21 # +2
Fai 26.11.2012 09:19 # +1
bormand 26.11.2012 09:46 # +2
LispGovno 26.11.2012 10:13 # +1
2)Разворачивать стек, создавая новый конечный список, который в конце тоже дополнится жопами.
3) ...
4)PROFIT
Одна проблема: Когда мы создали первый [1], то он уже превращается в 1ницу с бесконечножопным хвостом, так что добавить следующий элемент списка уже не представляется возможным.
Ну и как бы вообще совершенно не понятна идея этой бесполезной бесконечножопной фичи
LispGovno 05.11.2012 15:31 # 0
bormand 05.11.2012 15:39 # +1
А зачем она в языке с повсеместной ленивостью?
LispGovno 05.11.2012 15:40 # +1
bormand 05.11.2012 15:51 # +4
LispGovno 05.11.2012 16:03 # +1
bormand 05.11.2012 16:18 # +2
LispGovno 26.11.2012 10:17 # +1
MRef на список? - мутабильное говно.
Ещё варианты?
bormand 26.11.2012 10:23 # +1
f x = let a = [1..] in ...
Вот тут a никто не держит кроме выражения, которое будет стоять на месте точек. Сборщик мусора отлично будет поедать этот список.
guestinxo 26.10.2019 11:25 # 0
https://ideone.com/4hYzxf
goatsinho 26.10.2019 15:15 # 0
В каком ещё языке есть такой?
MAPTbIwKA 26.10.2019 15:20 # 0
так гоатсе же в перле
guest8 26.10.2019 16:14 # −999
goatsinho 26.10.2019 16:43 # +1
Только не придумал, что делать со словом is.
https://ideone.com/F0Rau0
goatsinho 26.10.2019 17:40 # 0
goatsinho 26.10.2019 17:40 # 0
Теперь надо сделать так, чтобы функция prolog прогоняла код с разными комбинациями переменных $foo, $bar, $baz, тогда удастся напечатать весь код.
guest8 26.10.2019 18:19 # −999
bagrinho 26.10.2019 18:28 # 0
guest8 26.10.2019 18:50 # −999
gost 26.10.2019 19:10 # 0
guest8 26.10.2019 19:16 # −999
guest8 26.10.2019 19:16 # −999
guest8 26.10.2019 19:17 # −999
bagrinho 26.10.2019 19:23 # 0
Но мне страшно представить, на что будет нацелена точка входа.
guest8 26.10.2019 21:54 # −999
bagrinho 26.10.2019 19:30 # 0
guest8 26.10.2019 19:36 # −999
bagrinho 26.10.2019 20:08 # 0
https://en.wikipedia.org/wiki/Crt0
guest8 26.10.2019 20:45 # −999
CupuucKuu_nemyx 27.10.2019 22:32 # 0
bagrinho 26.10.2019 19:16 # +1
http://govnokod.ru/12144
http://govnokod.ru/12149
http://govnokod.ru/12173
guest8 26.10.2019 19:16 # −999