AF
Size: a a a
AF
[
AF
[
JS
[
AF
JS
[
AA
AA
JS
AA
JS
AA
JS
JS
AF
SD
change :: (Ord a, Num a) => a -> [[a]]Наверняка уже это спрашивали, но надеюсь подскажите. Попробывал расписать на листочке рекусивные вызовы и вообщем ничего не понял. Вот например если
change 0 = [[]]
change amount = [c:cs | c<-coins, c<=amount, cs<-change(amount-c)]
coins = [2,3,7] и вызываю change 7. Как я понял должно быть что-то вроде этого:change 7 = [2:cs ... cs <- change 5]Тогда получается должно быть:
change 5 = [2:cs ... cs <- change 3]
change 3 = [2:cs ... cs <- change 1]
change 1 = []
[2:[2:[2:[]]]] - но компилятор ругается на такое выражение и в самом алгоритме списка [2,2,2] вообще нету, такое ощущение будто бы компилятор такой: "Так ладно тут у нас просто пустой список вернулся - значит убираем последнюю двойку и берём другой элемент из coins". Крч вообще не понимаю это, может есть какая-нибудь инфа про то как работает генератор списков, потому что сейчас я в край запутался