← All posts tagged stepic

Ну вот и закончился курс по хаскелю. Впечатления — очень хороший курс, автора молодцы. Хотя часть о монадах чувствую без практике послезавтра выветрится из головы, потому что походу не сильно там и задержалась. Например, я так и не понял как сделать последнее задание при помощи монады State, потому сделал без монад codepad.org
В кратце, есть дерево (), надо переделать в дерево чисел что бы были пронумерованы слева направо.

что-то мое решение к задачам о монаде IO не принимается, выдавая ошибки компиляции. Не пойму в чем проблема, на моей машине все работает — codepad.org
не думаю что вопрос о Хаскеле, скорее о степике. Но если я делаю что-то не так — можете тоже написать. Условие в /1

Помните я говорил wat на туплы хаскеля #2807019? Оказалось что час назад окрылась последняя неделя курсов, где о этом рассказывают прям stepic.org клево.
А еще (1) — это не тупл. Это просто 1 в скобках :( походу хаскель не умеет туплы (как умеет их питон, например)

Интересный урок. Но блин, я не сделал 3 заданька. Помощь приветствуется.

1 — сраные галочки. Я вообще не пойму что с меня хотят, и вообще что за хрень спрашивают и почему что-то кроме `emptyOrSingleton False undefined` верно stepic.org

2 — более общий вопрос по хаскелю. Вот я написал кот. Вроде все сходится по типам, но не работает, я не понимаю почему. Как это вообще "дебажить"? stepic.org
Вот мой код — codepad.org

3 — что-то заметил что пропустил. Пока совсем не понял что с меня вообще хотят stepic.org

Долго долбился как написать stepic.org а потом фигак проснулся и написал решения в две строчки... Прям хорошо.
А вот с свертками что-то ступорю.

пока что любимое решение это:

evenOnly :: [a] -> [a]
evenOnly = map snd . filter (even .fst) . zip [1..]

Вот со свертками родил вот это:
evenOnly :: [a] -> [a]
evenOnly = foldr (\(i,x) a -> if even i then x:a else a) [] . zip [1..]

А есть ли что более красивое?

Что-то застопорился неожиданно на https://stepic.org/lesson/12321/step/8
Не пойму, что не так...

perms :: [a] -> [[a]]
perms [] = []
perms [x] = [[x]]
perms (x:xs) = concatMap (interleave x) (perms xs)
  where
    interleave :: a -> [a] -> [[a]]
    interleave a l = interleave' a l []

    interleave' :: a->[a]->[a]->[[a]]
    interleave' a [] rs = [a : rs]
    interleave' a ls@(l:el) rs = (ls ++ [a]  ++ rs) : interleave' a el (l:rs)