По итогам:
http://programmingmindstream.blogspot.ru/2017/10/haskell-vs-count.html?m=1
А как length/count (количество элементов списка) на Haskell реализовано?
Так:
Count [] = 0
Count ( _ : xs ) = 1 + Count xs
?
Или можно как-то эффективнее?
http://programmingmindstream.blogspot.ru/2017/10/haskell-vs-count.html?m=1
А как length/count (количество элементов списка) на Haskell реализовано?
Так:
Count [] = 0
Count ( _ : xs ) = 1 + Count xs
?
Или можно как-то эффективнее?
Именно так и есть правильно. man оптимизация хвостовой рекурсии
ОтветитьУдалитьЭто не оптимизация. Оптимизировать тут можно форсировав вычисления чанков: lenAcc (_:ys) n = lenAcc ys $! (n + 1); И вообще - лучше не париться и использовать foldr: count = foldr (\x _ -> x + 1) 0. В любом случае делать "в лоб" как у Александра - правильно до тех пор пока действительно не потребуется оптимизация
ОтветитьУдалитьСпасибо.
УдалитьБольшое спасибо за разъяснения.
Удалить