
Андрей
31.08.2017
19:54:43
Вектора ресайзить надо оптимально под капотом. С очередью свои сложности. А спписок в Хаскеле - это поток, или генератор.Но в этой задаче бесспорно он не самая оптимальная дструктура данных.

Ilya
31.08.2017
19:55:10
я бы сказал самая неоптимальная =)
ибо список по сути рабботает как стек
а стек это противоположность очереди в каком-то смысле

Google

Андрей
31.08.2017
19:55:29
я бы поспорил насчет сравнения с вектором

Ilya
31.08.2017
19:56:04

Андрей
31.08.2017
19:56:27
если деревьев много и они неглубокие - вектор победит имхо. А если деревья глубокие - вектор просядет из-за постоянных релокаций и забивания памяти, а список сфьюзится и даже в память не будет занимать
Ну выше тремя постами писали про вектра. И до этого тоже, предлагая их в этой задаче.

Ilya
31.08.2017
20:00:39
ну может где-то очередь и реализуют вектором, не знаю

Alexander
31.08.2017
20:02:16

Андрей
31.08.2017
20:02:23
я Окасаков на читал, не знаю как эффективно реализовать очередь в ФП.

Dmitry
31.08.2017
20:03:20
амортизированно эффективно

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


Ilya
31.08.2017
20:05:10
import Stdafx в студии тоже есть?:)))

Alexander
31.08.2017
20:05:18

Андрей
31.08.2017
20:05:53
Да, наверное так будет оптимальнее. Если она есть на кодоварсах.

Google

Андрей
31.08.2017
20:06:23
Инкапсуляция рулит

Ilya
31.08.2017
20:06:28
так будет оптимальнее независимо от того, чё там есть на каком-то кодоварсе ;)
мы же тут программы пишем
надо сразу делать нормально, а не извращаться ради непонятно чего

Андрей
31.08.2017
20:06:58
отнюдь. Автор вопроса кату решал, а не программу писал )

Ilya
31.08.2017
20:07:24
я лично вообще не знаю, что такое ката, зато я читал статью про qsort на haskell
https://habrahabr.ru/post/317348/
вот как бы не вышло так, что после таких, как вы варажаетесь, кат не появился ещё один писатель таких qsort-ов
а чё, зато на списках
короче поинт в том, что плохи те задачи для начинающих, которые прививают неправильный путь, даже если это делается в угоду последовательному изложению и т.д.

Андрей
31.08.2017
20:10:12
И снова вернулись к холиварам. Хотя кто-то здесь обрадовался, увидев что-то другое кроме идесрачей )

Alexander
31.08.2017
20:11:31
вопрос DList vs Seq vs [],[] вполне себе может быть актуальным
независимо от того задача это на обучение или реальная программа

Ilya
31.08.2017
20:12:13
в третьем варианте

Alexander
31.08.2017
20:12:25
будут
это он он все равно amortized o(1)

Denis
31.08.2017
20:19:13
читал когда Антона Холомьева то он говорил что DList более правильный по производительности

Евгений
31.08.2017
20:26:30

Abbath
31.08.2017
20:28:37
Пиздец

Google

Евгений
31.08.2017
20:28:39

Ilya
31.08.2017
20:29:17
не самозародился же этот код

Евгений
31.08.2017
20:29:53
qsort на списках это лулзы, а не реальный код

Abbath
31.08.2017
20:29:54
Я решаю задачи ради рейтинга. Оптимизаторы могут идти со своими очередями-хуечередями

Евгений
31.08.2017
20:30:47

Alexander
31.08.2017
20:30:59

Андрей
31.08.2017
20:31:09
Я играла в КВН
Только ради замужа
И теперь стою я здесь
а все девки там уже
(С)
А я когда-то читал Александра Вершилова, и он писал, что [] это больше не дата а контрол структура
Раз уж об авторитетах заговорили )))

Ilya
31.08.2017
20:34:32

Abbath
31.08.2017
20:34:51
Потому что не проходило по скорости :)
Зачем там очередь - не ясно

kana
31.08.2017
20:35:19
"оптимизировать достаточно, чтобы система пропустила"

Ilya
31.08.2017
20:35:22
>Зачем там очередь - не ясно
потому что она эффективнее в этой задаче. а что тебе нельзя её подключать - я не знал, потому что не знаком с этим сайтом

Андрей
31.08.2017
20:35:24
Но ведь они правы - кто советуют тебе абстракцию Сиквенса

Alexander
31.08.2017
20:37:17
по уровням можно и без очереди, но это то ещё удовольствие
я на степике делал

Андрей
31.08.2017
20:38:20
из любви к искусству? )

Alexander
31.08.2017
20:38:31
да

Google

Alexander
31.08.2017
20:38:42
я вот даже не помню как именно
но поидее там хитрый инстанс для Foldable был
ну и.е очередь там была, но явно не строилась

Denis
31.08.2017
20:44:25

Андрей
31.08.2017
20:45:40
Ну не все, по крайней мере раньше было не все - может сейчас подвезли. Раньше точно не было векторов и Парсека, например.

kana
31.08.2017
20:51:09
вот такое наивное и совсем не эффективное решение спокойно прошло проверку по времени
как бы разбиваем дерево на массив уровней (где уровень - массив элементов на уровне) и конкатим все

Андрей
31.08.2017
20:52:28
это и есть обход в ширину. остальное - детали реализации

Abbath
31.08.2017
20:58:56
@kana_sama merge это не zipWith?

kana
31.08.2017
20:59:17
zipWith вроде отбросит лишнее

Андрей
31.08.2017
21:01:24
Да можно было не удалять, все уже видели )))

kana
31.08.2017
21:09:24
Ну представь, что ты пишешь код на DSL, идеально заточенным под твою доменную область. Всякая сериализация/десериализация, консёрны с persistence, и т.д. — все это уже за тебя делают. Вот на таком DSL ты только бизнес-логику приложения описываешь. То есть то, что оно концептуально должно делать.
а можно какой-нибудь реальный пример кода? А то в тех простых вещах, что я писал, у меня все было прямо в одной функции - и обращение к базе, и генерация объектов доменной модели (которые я вручную на самом деле не создавал, использовал те, что персистент генерит), то есть никаких edsl, скрывающих реализацию, я не писал

Denis
31.08.2017
21:12:19
https://github.com/haskell-perf/sequences

Index
31.08.2017
21:32:06
Что может быть удобнее, чем одну кнопку нажать и запустить билд, и приложение сразу, или режим дебага?
Зачем какие-то команды вводить?
Консоль -- это все от бедности
Потому что сделать IDE трудно, а напечатать текст в терминал -- не очень

Ilya
31.08.2017
21:34:20
можно точно так же повесить часто используемые команды на хоткеи

Google

Ilya
31.08.2017
21:34:24
и нажимать "одну кнопку"

Андрей
31.08.2017
21:34:59
можно голосовой набор записать )

Index
31.08.2017
21:35:08
Ну можно свою IDE накостылить, это мне не новость

Ilya
31.08.2017
21:35:29
а что новость?:)

Андрей
31.08.2017
21:35:47
клавиатура и мышь как ХИДы - тоже от бедности

Ilya
31.08.2017
21:35:54
что IDE используют те, кто любит изкоробочные решения, а консоль - решения-конструкторы?
у обоих подходов свои плюсы

Index
31.08.2017
21:36:49
а что новость?:)
Что кто-то осознанно отказывается от этого направления развития. По принципу, что не очень-то и хотелось
IDE не случайно содержит в себе слово integrated

Ilya
31.08.2017
21:37:30

Index
31.08.2017
21:37:37
Я могу и прояснить.

Андрей
31.08.2017
21:37:46
Там скорее принцип "убого, зато однообразно"

Index
31.08.2017
21:38:36
Возьмем базовый функционал IDE: подсветка, автокомплит, базовые рефакторинги (extract method), jump to definition, запуск билда
Если все это лепить в vim/Emacs, то несомненно заниматься каждой задачей будет отдельный плагин, каждый из которых самостоятельно попытается распарсить исходники, и каждый из которых сломан по-своему.
В итоге оно медленное и ломается постоянно
В то время как IDE, будучи прочно интегрирована с компилятором, от такого не страдает. Редактировать C# в VS просто удобно, сразу после установки.
И тулинг не скрипит, не ломается, не тормозит

Ilya
31.08.2017
21:40:29

Даниил
31.08.2017
21:40:37
> сразу после десятичасовой установки
fixed