@haskellru

Страница 374 из 1551
Aragaer
31.08.2017
17:48:02
это плагин для вима, который общается с безголовым эклипсом

но когда попытался перенести этот опыт на другой код, то опять столкнулся с тем, что надо "просто каталог с кодом" превращать в "проект эклипса". Пободался час и плюнул

Vitaly
31.08.2017
18:05:09
Ребят, я в haskell совсем новичок, делаю первые шаги. Однако, имею опыт работы на C# .NET. Так вот я привык в Visual Studio к тому, что где код пишешь, там его и танцуешь), ну т.е. дебажишь, всё просто. А как дела обстоят в haskell? Поставил vs code, накатил туд Haskero, всё вроде бы работает: код подсвечивается, на ошибки в коде мне выдаются сообщения и предупреждения и т.д. Но как запустить собсно интерпретатор? Как дебажить код и т.д.? До сего дня я пробовал юзать связку notepad++ и GHCI-консоль. В редакторе код сохранил, альттабнулся в консоль, там перезагрузил модуль, вызвал нужную мне функцию, посмотрел результат, и так по кругу. А можно ли этот процесс упростить, свести его к работе в одной программе, напрмер, vs code? Там и редактировать код, и выполнять его с выводом результатов? Спасибо.

kana
31.08.2017
18:07:40
Ctrl+` немного упростит - уберет альттабы

Google
Vitaly
31.08.2017
18:09:20
а принцип остаётся, как я описал?

т.е. поправил код, сохранил, из консоли релоад, выполнил, и т.д.?

kana
31.08.2017
18:10:24
Ну у меня просто stack run перезапускается по апдейтам файлов, для крупных вещей такое не подойдет

Vitaly
31.08.2017
18:11:19
да вещи абсолютно мелкие. я пока еще хелло ворлд делаю, да числа фибоначчи))

но смысл такой, что всё выполнение кода производится из консоли? Т.е. ничего принципиально другого, более удобного нет на сегодняшний день? Т.е. все эти примочки для атома, вс кода и т.п. - просто подсветка синтаксиса и улучшение работы с самим текстом кода, а дебаг как был из консоли, так и остается сейчас? Правильно понимаю?

kana
31.08.2017
18:16:20
Можешь попробовать leksah, если он жив конечно

Vitaly
31.08.2017
18:18:34
так я интересуюсь, как работают здешние ребята с хаскеллем. Т.е. сам процесс разработки пытаюсь для себя настроить, вот и спрашиваю, правильно ли я понимаю этот процесс..

если все так работают, и это нормально, то ок, вопросов нет. Просто вдруг все юзают какую-то удобную штуку, о которой я не знаю, и из консоли мучаюсь... ))

Vitaly
31.08.2017
18:22:52
не, про подсветку понятно

именно уже дебаг

т.е. примерно так у всех выглядит рабочая область?

Google
Vitaly
31.08.2017
18:23:38


поправил код, сохранил, переключился в консоль, перегрузил модуль, вызвал функцию, посмотрел результат - цикл повторил?

Valeriy
31.08.2017
18:28:26
Есть haskell for mac, там прямо плэйграунд, но вроде подходит только для учебных вещей

переключаться в ghci конечно неудобно, приходится по tdd писать и юзать только stack test ?

Vitaly
31.08.2017
18:30:31
ну меня скорее интересует, как обстоит у хаскеллистов самый обычный рядовой будничный процесс разработки. Всякие там плейграунды и прочие изыски - это не так интересно)

а stack - это, я так понимаю, какая-то среда для хаскелла?

kana
31.08.2017
18:31:51
https://www.haskellstack.org/ Дока у него хорошая

Vitaly
31.08.2017
18:34:15
спасибо

Denis
31.08.2017
18:39:06
строгую типизацию не дебажат)) инхабитация и тайп дривен девелопмент

Есть haskell for mac, там прямо плэйграунд, но вроде подходит только для учебных вещей
автор обещал в вскоре сделать возможным открывать там норм проект (какой-нибудь уже готовый проект на хаскелл)



kana
31.08.2017
18:44:02
кстати, как в хаскеле с дебагом принтами? Есть какой-нибудь хак типа Debug.log : String -> a -> a как в элме, который ведет себя как id + выводит что-нибудь чисто для дебага?

да, нашел Debug.trace

Anatolii
31.08.2017
18:45:50
не успел:)

kana
31.08.2017
18:46:40
да)

Denis
31.08.2017
18:50:49
trace, traceM вроде

Андрей
31.08.2017
18:52:14
С дебугтрейсом в ленивой семантике порой неожиданные вещи получаешь на выход )

Abbath
31.08.2017
18:56:34
`

levelorder x = loop [x] where loop [] = [] loop (Empty:xs) = loop xs loop (Node v l r:xs) = v : loop (xs ++ [l, r])

Google
Abbath
31.08.2017
18:56:50
Как это оптимизировать?

Index
31.08.2017
18:57:25
Index
31.08.2017
18:57:40
Ленивостью надо проникнуться

Как это оптимизировать?
Добавить в loop еще один параметр, в котором будут накапливаться эти [l, r] в обратном порядке, а потом, как дойдешь до [], начать их разбирать

Андрей
31.08.2017
18:59:30
Дерево в список элементов сплющить? Фолдом имхо, дерево дерайвит фолдабл.

Index
31.08.2017
18:59:43
Я думаю это какое-то упражнение

Иначе конечно фолд обычный

Андрей
31.08.2017
19:01:27
foldr (:) [] вроде, если не путаю. Ну или что-то подобное из 5 символов )

Abbath
31.08.2017
19:01:47
У меня кастомное дерево

Олег
31.08.2017
19:02:01
levelorder x = loop [x] where loop [] = [] loop (Empty:xs) = loop xs loop (Node v l r:xs) = v : loop (xs ++ [l, r])
Мне кажется я один не понимаю, почему тут loop по списку, если функция принимает ровно один x

Андрей
31.08.2017
19:02:54
Ну напиши в конце твоего тривиального кастомного бинарного дерева дерайвинг все что надо - от еку до траверсабла

Abbath
31.08.2017
19:03:23
codewars

Но да, stepik тоже

Андрей
31.08.2017
19:04:23
ааа, там не просто сплющить, а определенный порядок чтобы был? ну свой фолд написать - какМосквин завещал )

Abbath
31.08.2017
19:04:39
Это и есть свой фолд

Лол

Но он медленный

Denis
31.08.2017
19:05:04
Но да, stepik тоже
а напомни какой вариант и кинь ссылку на кодеварс

Google
Андрей
31.08.2017
19:05:11
ясен пень xs ++ [l,r]

Abbath
31.08.2017
19:05:52
Ну это понятно

Но как

В обратном порядке хранить эти [l,r] мне уже советовали

Но как их потом разворачивать

Вот это загадка

Андрей
31.08.2017
19:06:35
Можно накопить в обратном порядке а потом все реверснуть. А вооюще задачу бы всю увидеть.

Abbath
31.08.2017
19:07:43
Это вся задача

Denis
31.08.2017
19:08:42
Это вся задача
это 2 на степике курс?

Abbath
31.08.2017
19:08:48
Нет

Но да

Андрей
31.08.2017
19:09:35
на степике тесты убогие - на оптимальность реализации не проверяют вообще

Denis
31.08.2017
19:09:44
Нет
кинь ссылку на codewars

Андрей
31.08.2017
19:09:48
поэтому там бы прошло )

Abbath
31.08.2017
19:09:59
https://www.codewars.com/kata/52bef5e3588c56132c0003bc/train/haskell

treeByLevels :: Maybe (TreeNode a) -> [a] treeByLevels x = loop [x] [] where loop [] [] = [] loop [] acc = loop (concat . reverse $ acc) [] loop (Nothing:xs) acc = loop xs acc loop (Just (TreeNode l r x) : xs) acc = x : loop xs ([l, r] : acc)

Все еще медленно

Denis
31.08.2017
19:17:22
замени вектором)

а потом просто toList

Abbath
31.08.2017
19:20:56
Решил на списках

Google
Denis
31.08.2017
19:21:24
Решил на списках
решил или решил просто продолжить решать?

Abbath
31.08.2017
19:21:34
Решил

Евгений
31.08.2017
19:22:21
Ух, что-то интересное, а то всё редакторосрач, да редакторосрач

Андрей
31.08.2017
19:34:28
Тоже решил. Там все просто. МОжет мои каты порешаете, раз такое вызывает интерес? ;)

Ilya
31.08.2017
19:35:48
treeByLevels :: Maybe (TreeNode a) -> [a] treeByLevels x = loop [x] [] where loop [] [] = [] loop [] acc = loop (concat . reverse $ acc) [] loop (Nothing:xs) acc = loop xs acc loop (Just (TreeNode l r x) : xs) acc = x : loop xs ([l, r] : acc)
Насколько я понял, стоит задача обойти бинарное дерево в ширину. В таком случае, эффективное решение должно использовать тип данных "очередь". Очередь на списках эмулировать можно, но это будет неэффективно, т.к. нам надо прилеплять элементы с одно конца, а доставать с другого, а в х-ле списки "одностронние".

гугл по запросу "haskell queue" выдает Data.Sequence, Data.Dequeue, можешь попробовать их

Андрей
31.08.2017
19:42:50
Там для тестов достаточно обходить в ширину и приклеивать в конец списка. Главное не сорваться в глубину - подсунут бесконечное дерево и захотят взять первые 100 элементов результата функции - и тогда приплыли )

Ilya
31.08.2017
19:44:10
вроде как речь шла про эффективную реализацию

Андрей
31.08.2017
19:44:18
Ну по крайней мере на их месте я бы именно так и сделал. Бесконечные структуры данных в тестах на сабже милы - они сразу отсеивают решения, подразумевающие дно.

Ilya
31.08.2017
19:44:20
по-крайней мере этого хотел автор

Андрей
31.08.2017
19:44:34
Речь шла чтобы тесты на кодоварсах пройти

И имхо именно этого хотел автор, а написал про "эффективную реализацию" )

Ilya
31.08.2017
19:46:43
Это пожалуйста. Но надо понимать, что сколько не усирайся - нормально на х-ль списках эту задачу не решишь.

def нормально = сравнимо с императивным алгоритмом, использующим очередь

Андрей
31.08.2017
19:47:56
Надо. Но кодоварс - сферической в вакууме, никаких секов/дипсеков, арраев, векторов и прочих эффективных практических ужасов там не нужно ) Там даже вектор не подключается, насколько я помню )

kana
31.08.2017
19:48:37
ну и на хаскеле можно решить императивно, если уж очень хочется

Ilya
31.08.2017
19:49:29
а тут и не обязательно императивно даже

просто блин, у списков доступ к концу это O(n), у очереди - O(1)

вы это никак не обойдете

а тесты можно сделать сколько угодно слабыми

чтобы какое угодно г. прошло

Страница 374 из 1551