LINUX.ORG.RU

Ответ на: комментарий от MyTrooName

Подозреваю, что никому нет до этого дела. Предложи в libraries@, может заменят

anonymous
()
Ответ на: комментарий от MyTrooName

так почему не заменили?

Блин, тебе ж анонимус ответил. Вот код из GHC:

-- | The 'sum' function computes the sum of a finite list of numbers.
sum                     :: (Num a) => [a] -> a
-- | The 'product' function computes the product of a finite list of numbers.
product                 :: (Num a) => [a] -> a
#ifdef USE_REPORT_PRELUDE
sum                     =  foldl (+) 0
product                 =  foldl (*) 1
#else
sum     l       = sum' l 0
  where
    sum' []     a = a
    sum' (x:xs) a = sum' xs (a+x)
product l       = prod l 1
  where
    prod []     a = a
    prod (x:xs) a = prod xs (a*x)
#endif
provaton ★★★★★
()
Ответ на: комментарий от MyTrooName

1. (+) и (*) в коде, используемом GHC, прописаны явно и он знает, что они strict 2. Чуть выше листинга 2 SPECIALIZE прагмы для Int и Integer, позволяющие GHC сгенерировать заинлайненный код 3. Strictness analyzer доделывает работу

anonymous
()
Ответ на: комментарий от adzeitor

а тж 2anonimous

это все чудесно, жаль только, что не везде работает по умолчанию. в ghci у меня sum заметно медленнее, чем foldl' (+) 0

MyTrooName ★★★★★
() автор топика
Ответ на: комментарий от MyTrooName

В ghci нет никаких оптимизаций. Насколько я помню, интерактивный режим медленнее, чем -O0

anonymous
()
Ответ на: комментарий от MyTrooName

Если sum выражена через левую свертку, то нет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.