Size: a a a

2021 March 16

JS

Jerzy Syrowiecki in Haskell Start
IC Rainbow
А если явно под стеком запустить?

stack exec -- code .
это решение не масштабируется на несколько проектов с разными resolver
источник

IR

IC Rainbow in Haskell Start
Jerzy Syrowiecki
это решение не масштабируется на несколько проектов с разными resolver
Я до хие всегда так делал. Самый топорный способ уговорить примерно любой инструмент запуститься под стеком даже если инструмент к такому не готовили.
источник

JS

Jerzy Syrowiecki in Haskell Start
да, действительно, Льву сейчас хочется запустить хоть в каком-то виде HLS
источник

 P

 ‌‌Gleb Pilipets... in Haskell Start
Ребят, а кто-то может помочь понять, почему это не работает на хаскеле?

allPaths startingNode graph =
   case M.lookup startingNode graph of
       Nothing -> []                -- Case 1
       Just [] -> [[startingNode]]  -- Case 2
       Just kids ->                 -- Case 3
           map (startingNode:) $    -- All paths prepended with current node
               concatMap (`allPaths` graph) kids  -- All kids paths

Тип мне нужно вывести все пути от startingNode, граф задан списками инцидентных рёбер для каждой вершины.
Всегда выводит, что нету путей.

Вот такой граф есть, например
*Main> testGraph
fromList [(1,[8,6]),(6,[13,10,9]),(8,[13])]
источник

JS

Jerzy Syrowiecki in Haskell Start
 ‌‌Gleb Pilipets
Ребят, а кто-то может помочь понять, почему это не работает на хаскеле?

allPaths startingNode graph =
   case M.lookup startingNode graph of
       Nothing -> []                -- Case 1
       Just [] -> [[startingNode]]  -- Case 2
       Just kids ->                 -- Case 3
           map (startingNode:) $    -- All paths prepended with current node
               concatMap (`allPaths` graph) kids  -- All kids paths

Тип мне нужно вывести все пути от startingNode, граф задан списками инцидентных рёбер для каждой вершины.
Всегда выводит, что нету путей.

Вот такой граф есть, например
*Main> testGraph
fromList [(1,[8,6]),(6,[13,10,9]),(8,[13])]
в чём разница между case 1 и 2?
источник

JS

Jerzy Syrowiecki in Haskell Start
 ‌‌Gleb Pilipets
Ребят, а кто-то может помочь понять, почему это не работает на хаскеле?

allPaths startingNode graph =
   case M.lookup startingNode graph of
       Nothing -> []                -- Case 1
       Just [] -> [[startingNode]]  -- Case 2
       Just kids ->                 -- Case 3
           map (startingNode:) $    -- All paths prepended with current node
               concatMap (`allPaths` graph) kids  -- All kids paths

Тип мне нужно вывести все пути от startingNode, граф задан списками инцидентных рёбер для каждой вершины.
Всегда выводит, что нету путей.

Вот такой граф есть, например
*Main> testGraph
fromList [(1,[8,6]),(6,[13,10,9]),(8,[13])]
например, из 13 нет путей или есть пустое множество путей?
источник

JS

Jerzy Syrowiecki in Haskell Start
в общем, вопрос не про Хаскель, а про графы и логические ошибки
источник

R

Rafael in Haskell Start
LevT
Вернулся попробовать Хаскель, под виндой в WSL2 вижу такое
открой в VS Code вкладку output(там же, где терминал), там обычно есть логи от каждого расширения
источник

JS

Jerzy Syrowiecki in Haskell Start
кажется, Глиб хочет научиться решать задачи, а не решить только эту задачу. давайте ему помогать, а не подсовывать готовое решение
источник

 P

 ‌‌Gleb Pilipets... in Haskell Start
Jerzy Syrowiecki
в чём разница между case 1 и 2?
Та я хаскель просто не очень знаю - на С++ рекурсия как-то более очевидная.

Этот код на stackoverflow взял, но он не работает почему-то.

В случае первого вершины нету в графе, в случае второго вершина есть, но нету сыновей.
Ну да, для 13 вершины и вправду странно, но как это нужно исправить тогда?
источник

JS

Jerzy Syrowiecki in Haskell Start
 ‌‌Gleb Pilipets
Та я хаскель просто не очень знаю - на С++ рекурсия как-то более очевидная.

Этот код на stackoverflow взял, но он не работает почему-то.

В случае первого вершины нету в графе, в случае второго вершина есть, но нету сыновей.
Ну да, для 13 вершины и вправду странно, но как это нужно исправить тогда?
стоит чуть-чуть узнать, тогда и ошибки в чужом коде, и рекурсия станет очевиднее
источник

JS

Jerzy Syrowiecki in Haskell Start
 ‌‌Gleb Pilipets
Та я хаскель просто не очень знаю - на С++ рекурсия как-то более очевидная.

Этот код на stackoverflow взял, но он не работает почему-то.

В случае первого вершины нету в графе, в случае второго вершина есть, но нету сыновей.
Ну да, для 13 вершины и вправду странно, но как это нужно исправить тогда?
надо перестать различать эти случаи. предположим, если вершины нет в графе, то это то же самое, что вершина есть без сыновей. тогда в 1 и 2 случаях ответ надо давать одинаковый
источник

 P

 ‌‌Gleb Pilipets... in Haskell Start
Мне кажется, что проблема именно в представлении графа.

Если он будет таким
*Main> testGraph
fromList [(1,[6,8]),(6,[9,10,13]),(8,[13]),(9,[]),(10,[]),(13,[])]
То всё работает
источник

 P

 ‌‌Gleb Pilipets... in Haskell Start
Jerzy Syrowiecki
надо перестать различать эти случаи. предположим, если вершины нет в графе, то это то же самое, что вершина есть без сыновей. тогда в 1 и 2 случаях ответ надо давать одинаковый
Если я перестану различать, то тогда 3 случай не будет работать нормально, так как конечным шагом рекурсии будет [].
По крайней мере оно не работает...
источник

JS

Jerzy Syrowiecki in Haskell Start
 ‌‌Gleb Pilipets
Мне кажется, что проблема именно в представлении графа.

Если он будет таким
*Main> testGraph
fromList [(1,[6,8]),(6,[9,10,13]),(8,[13]),(9,[]),(10,[]),(13,[])]
То всё работает
тогда 3 решения:

1. не разрешать некорректные графы
2. достроить некорректный граф пустыми вершинами до корректного
3. отличать отстутвие вершин только на первой итерации, а дальше не отличать
источник

 P

 ‌‌Gleb Pilipets... in Haskell Start
 ‌‌Gleb Pilipets
Мне кажется, что проблема именно в представлении графа.

Если он будет таким
*Main> testGraph
fromList [(1,[6,8]),(6,[9,10,13]),(8,[13]),(9,[]),(10,[]),(13,[])]
То всё работает
Окей, я понял, спасибо.

А если у меня задан граф списком ребёр, то как мне его превратить в такую мапу как здесь.

fromEdges :: [(Node, Node)] -> Graph
fromEdges = M.fromListWith (++) . map (fmap (:[]))

Была попытка сделать вот так, но здесь вершины без childs не добавляются, то есть
если граф [(1, 2)], то будет [(1, [2])], а нужно [(1, [2]), (2, [])].
источник

JS

Jerzy Syrowiecki in Haskell Start
 ‌‌Gleb Pilipets
Окей, я понял, спасибо.

А если у меня задан граф списком ребёр, то как мне его превратить в такую мапу как здесь.

fromEdges :: [(Node, Node)] -> Graph
fromEdges = M.fromListWith (++) . map (fmap (:[]))

Была попытка сделать вот так, но здесь вершины без childs не добавляются, то есть
если граф [(1, 2)], то будет [(1, [2])], а нужно [(1, [2]), (2, [])].
как вы первую вершину добавляете, так же и вторую надо
источник

JS

Jerzy Syrowiecki in Haskell Start
 ‌‌Gleb Pilipets
Окей, я понял, спасибо.

А если у меня задан граф списком ребёр, то как мне его превратить в такую мапу как здесь.

fromEdges :: [(Node, Node)] -> Graph
fromEdges = M.fromListWith (++) . map (fmap (:[]))

Была попытка сделать вот так, но здесь вершины без childs не добавляются, то есть
если граф [(1, 2)], то будет [(1, [2])], а нужно [(1, [2]), (2, [])].
странный вопрос. вы хотите получить решение на Хаскеле, но сами писать не хотите?
источник

JS

Jerzy Syrowiecki in Haskell Start
поставьте ТЗ, закажите разработку
источник

JS

Jerzy Syrowiecki in Haskell Start
если вы сами будете писать, то было бы здорово сначала с основами языка разобраться
источник