задумках)
sum xs / length xs
написать кастомную функцию с аккумом?
не работает для больших списков
можно, но не обязательно
какая сигнатура у правильного ответа?
[Double] -> Double, например
использовать пакет фолдл
не единственное решение и не самое простое
неправильно, тупол-то ленивый
тестируйте на потребление памяти
промежуточные средние не нужны, они тут не помогают, только точности снижают
ну можно тогда data STuple a = STuple !a !a
да я тоже так думаю
а если сделать? data STuple a = STuple {-# UNPACK #-} !a {-# UNPACK #-} ! a
Можно бангами намазать
ага, выше уже (,) $! _ $! _ предложили)
Что то типа такого не прокатит? average' :: Fractional a => [a] -> a average' xs = f 0 0 xs where f :: Fractional a => a -> a -> [a] -> a f sum count [] = sum / count f sum count (x:xs) = f (sum+x) (count+1) xs
это нормально будет работать токо если развертки доступны и компилятор специализирует эту функцию
А отак? average' :: [Double] -> Double average' xs = f 0 0 xs where f sum count [] = sum / count f sum count (x:xs) = f (sum+x) (count+1) xs По идее хвостовая должна быть, не?
Как это отпрофилировать можно в или еще как то?
корку посмотреть
а ее как правильно посмотреть?
да там нет неправильных способов
тогда команду покажи)
На каком списке корку ждать?
gdb binfile core
посмотреть промежуточное представление, в которое хаскель компилируется
че это такое?) на маке как такое смотретьт?
например -ddump-to-file -ddump-simpl -dsuppress-all -dno-suppress-uniques -dppr-case-as-let -dppr-cols200
Ставь gdb через brew подписывай и используй, либо lldb binfile core ароде
Обсуждают сегодня