Size: a a a

2021 May 02

[

[BRM]White Rabbit in Haskell
так, давай разбираться.
у нас есть coins = [2, 3, 7], у нас есть начальное значение change 7
при первой передаче amount = 7.  Стоит фильтр на то, что монетки больше или равны amount. Первая монетка 2, она подходит. Функция change возвращает [[]], следовательно cs = [...].
следуя приоритету порядка операция в генерации списков, первое значение c добавится во все листы, которые возвратил change(amount-c).
В change(amount-c) происходит та же логика. Грубо говоря, генерация списков в данном случае склеивает [[]] возвращённые из разных вызовов change в один [[]]
источник

JS

Jerzy Syrowiecki in Haskell
первый шаг:
change 7 =
 [2:cs | cs <- change 5] ++
 [3:cs | cs <- change 4] ++
 [7:cs | cs <- change 0]
источник

SD

Semyon Dubskikh in Haskell
Эта запись понятнее, но вцелом всё ровно не понятно почему когда у меня вызывается change 1, то возвращается ничего, просто поидее он же должен вернуть [] и тогда у меня должна быть самая крайняя левая строка [2:2:2:[]]? Крч когда проходился с дебагером у меня возникло чувство будто бы [] просто убиралось и тупо вместо послдней 2 бралось следующее занчение из списка, хотя вроде бы должна была быть ошибка, что возвращаемый тип [], а не [[]]?
источник

JS

Jerzy Syrowiecki in Haskell
что такое "ничего"? Хаскель не может вернуть ничего
источник

JS

Jerzy Syrowiecki in Haskell
change 1 должно вычисляться в [] — пустой список вариантов, потому что 1 не набрать монетами по 2
источник

SD

Semyon Dubskikh in Haskell
Это то понятно, но ведь [] не равен [[]]?
источник

JS

Jerzy Syrowiecki in Haskell
конечно, не равен
источник

JS

Jerzy Syrowiecki in Haskell
первый список пустой, второй непустой
источник

SD

Semyon Dubskikh in Haskell
Тоесть по идее [] и [[]] имеют разные значения, но один тип, поэтому если функция возвращает [[a]], то вернуть [] - не ошибка?
источник

KV

Kirill Valyavin in Haskell
Список списков может быть пустым, конечно же
источник

к

кана in Haskell
[] это пустой список значений типа A для любых A

если у нас список списков, то [] это пустой список списков
[[]] это непустой список из одного пустого списка
источник

SD

Semyon Dubskikh in Haskell
Ок, спасибо с этим разобрался
источник

¯

¯\_(ツ)_/¯ in Haskell
вы не могли бы поревьювить код? (или тут такое нельзя спрашивать?)
источник

JS

Jerzy Syrowiecki in Haskell
можно спрашивать, но мало кто хочет
источник

JS

Jerzy Syrowiecki in Haskell
чем меньше код, тем больше желающих ревьюить
источник

¯

¯\_(ツ)_/¯ in Haskell
47 строчек кода (вместе с сигнатурами функций)
источник

JS

Jerzy Syrowiecki in Haskell
мы сами посчитать можем. ссылку давайте уже
источник

¯

¯\_(ツ)_/¯ in Haskell
есть поле, на котором можно расставить мины. по полю можно ходить по всем направлениям (в т.ч. по диагонали). надо найти всевозможные пути от начала поля до конца (и выбрать максимальный по длине)
(на картинке показано поле 6x4, красным цветом обозначено место, откуда можно начинать, а синим, где можно закончить)
я представил поле в виде графа, а далее уже искал всевозможные способы
ссылка на код: https://pastebin.com/DVTdbxEf
источник

¯

¯\_(ツ)_/¯ in Haskell
это путь наибольшей длины для поля 5x4. о - мины, x - сам путь
источник

к

кана in Haskell
movements = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]

вот такие списки можно генерировать, а не писать с нуля

[(x, y) | x <- [-1..1], y <- [-1..1], (x, y) /= (0, 0)]
[(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]

но это не сильно короче вышло)
источник