Vladislav
Фреймворки https://www.spock.li/ http://haskell-servant.github.io/
Зигохистоморфный
Кметт активизировался http://comonad.com/reader/2018/the-state-comonad/
Sergey
Всем привет. Задали задачу для нахождения количества решений логического уравнения: (x1 && x2 -> x3) && (x2 && x3 -> x4) && .. (Xn-2 && Xn-1 -> Xn) = True пока что толком не знаю, как подступиться, но есть пару вопросов. Я собираюсь создать функцию, которая принимает кол-во переменных (не менее 3), можно ли тогда сделать что-то вроде такого: [Xi <- [True, False]]. Сразу много задать списков
Sergey
Еще это уравнение можно привести вот к такому виду, чтобы выражалось на haskell (not x1 || not x2 || x3) && (not x2 || not x3 || x4) && ... && (not Xn-2 || not Xn-1 || Xn) = True
Валерий
Ну и чего-нибудь подходящее для двух последних
Sergey
да, тут на листе проще решить, согласен) просто хотел узнать, насколько сложно это сделать, чтобы все автоматом считалось. Я не могу толковое рекурсивное решение сделать
Валерий
Я имел в виду, что все Х с 1 до n-2 включительно обязаны быть True
Sergey
X1 может быть False
Валерий
да, тут на листе проще решить, согласен) просто хотел узнать, насколько сложно это сделать, чтобы все автоматом считалось. Я не могу толковое рекурсивное решение сделать
Кажется, интмап из номера Х в значение, парсер в адекватную форму, тривиальный солвер и функция строк в пять для генерации
Валерий
X1 может быть False
Тогда первая скобка False и всё выражение тоже
Sergey
(False && x2 -> x3) - это выражение всегда True, независимо от x2 и x3
Валерий
Ой
Валерий
Я приоритеты забыл)
Sergey
импликация последней выполняется по приоритету
Sergey
ну и вообще, само уравнение парсить не нужно, думаю, создать функцию countSolve :: Int -> Int число переменных -> в число решений
Alexander
replicateM n [True, False] - создаст все списки длины n из True и False
Alexander
например
Sergey
блин, шикарная функция)) спасибо огромное, возможно, этого будет даже достаточно)
Alexander
советую на досуге разобраться почему это работает :)
Sergey
да, тут магия для меня какая-то происходит пока что)) Пока как есть использую, а потом разберусь)
Alexander
а потом length $ filter all $ map (\t -> zipWith3 wtf t (drop 1 t) (drop 2 t)) $ replicateM ..., где wtf это твой код
Alexander
даже лишней работы за счёт ленивости быть не должно, может правда zip не зафьюзится, но это мелочи
Alexander
(надеюсь это была не контрольная в универе..)
adam
СКНФ на хаскелле находит чтобы потом ему дали все девочки в группе 😎
Alexander
у меня было стойкое ощущение, что для этой цели выгоднее на общие пьянки ходить. Так что лучше если это просто задача по какому предмету или саморазвитие или ещё что
Alexander
хотя ощущение может быть обманчиво, т.к. я на них не ходил
Кабачок
Черт! Twf выучил Haskell, а он оказался не нужен.
A64m
может ли хаскельная программа, работающая 7 секунд работать сутки после переписывания на пурскрипте?
Алексей
Ставлю рупь — может
A64m
через 80 мин. выясним
A64m
тут надо пояснить, что если скомпилировать этот код ghcjs без оптимизаций и запустить на jvm-ной явоскриптовой имплементации (V8 слишком быстрый) то работает меньше суток
A64m
ну а скомпилированный с оптимизацией на V8 быстрее чем клин, окамл и скала, так что дело не только в яваскрипте
A64m
да, может
Сергей
Хочется применить RecordWildCards в таком виде: data ABC = ABC { a :: Int, b :: Int, c :: Int } m = do let a = 1 b <- something pure ABC {.. , c = 3} Если почти это, то получается: ... pure ABC {..} {c = 3} Но хотелось бы того же для strict значений: data ABC = ABC { a :: !Int, b :: !Int, c :: !Int } возможно ли?
Denis
А как RWC связан со строгостью?
A64m
только ABC{c = 3, ..}
Denis
Ну т.е. инициализировать в тот же момент все равно. Или это про синтаксис вопрос(я правда не понял)?
Сергей
Да про синтаксис
Сергей
только ABC{c = 3, ..}
Точно, то, что нужно
Сергей
А как RWC связан со строгостью?
это вопрос был потому что при строгих значениях, такая конструкцияне работала (конечно же): ABC {..} {c = 3}
Сергей
а, ну и такая ворма понадобилась потому что нужно в одной области видимосте инициировать несколько ABC разными значениями, так что c заранее не пропишешь : [ ABC{c = 1, ..} , ABC{c = 2, ..} , ABC{c = 3, ..} ]
кана
так это че, с новым стаком .cabal файлом можно почти не пользоваться для тривиальных вещей (добавление зависимостей, скажем)?
Alexander
я надеюсь, что все же нет, (если какое-нить решение типа hpack не используется)
кана
это хорошо, а то формат .cabal какой-то пришибленный
Alexander
ну не знаю
Alexander
ничем не хуже yaml
Alexander
а местами и получше
Alexander
@kana_sama какие проблемы у .cabal?
Alexander
как у формата
кана
ну меня "удивляло" всегда отсутствие какой-либо явной логики в необходимости ставить запятую в разных списках
Alexander
ставь везде
Alexander
оно так работает
Alexander
вообще там обязательно её ставить в зависимостях, т.к. без , могут быть сложности с парсеньем
Aliester
стоит ставит stack?
Aliester
или есть лучшие способы менеджмента хаскель-проектов?
Alexander
stack проще особенно для начала
Alexander
конечно в последнее время он нифига не развивается, там проявляется куча багов, но интерфейс гораздо более простой и понятный
Alexander
чаще выполняется принцип of the least surprise
Aliester
а есть что на подходе?
Alexander
нет
Alexander
cabal-install есть ещё
Alexander
он сейчас пошустрее развивается и там больше фич
Alexander
но там инопланетянский интерфейс
Антон
cabal-install есть ещё
А что, проблему cabal hell уже решили?
Arseniy
Да
Arseniy
В 2.0
Alexander
её решили лет я даже не знаю сколько назад
Arseniy
(при помощи nix :peka:)
Alexander
у меня в генте её и не было, на nix её не было, в cabal-dev её не было, с cabal sandbox её не было, в cabal-2.0 вообще хорошо
Alexander
cabal-dev появился, когда я ещё начинал haskell-ем увлекаться, в cabal-install оно тоже уже лет 5 как приехало
Alexander
ну как не было, можно было получить cabal hell, но если делать глупости
Alexander
типа все ставить через cabal install в глобально
A64m
с сендбоксами только замучаешься компилировать
A64m
уж начинающий с 256 игрушечными проектами точно устанет линзы компилировать
Антон
Линзы не нужны, геттеров с префиксами достаточно :yoba: