пятница, 27 октября 2017 г.

Вопрос. Haskell

По итогам:
http://programmingmindstream.blogspot.ru/2017/10/haskell-vs-count.html?m=1

А как length/count (количество элементов списка) на Haskell реализовано?

Так:

Count [] = 0
Count ( _ : xs ) = 1 + Count xs

?

Или можно как-то эффективнее?

4 комментария:

  1. Именно так и есть правильно. man оптимизация хвостовой рекурсии

    ОтветитьУдалить
  2. Это не оптимизация. Оптимизировать тут можно форсировав вычисления чанков: lenAcc (_:ys) n = lenAcc ys $! (n + 1); И вообще - лучше не париться и использовать foldr: count = foldr (\x _ -> x + 1) 0. В любом случае делать "в лоб" как у Александра - правильно до тех пор пока действительно не потребуется оптимизация

    ОтветитьУдалить