Хорошо ли определена производительность частичных или каррированных функций в Haskell?

В следующем коде:

ismaxl :: (Ord a) => [a] -> a -> Bool
ismaxl l x = x == maxel
           where maxel = maximum l

main = do
  let mylist = [1, 2, 3, 5]
  let ismax = ismaxl mylist
  --Is each call O(1)?  Does each call remember maxel?
  let c1 = ismax 1
  let c2 = ismax 2
  let c3 = ismax 3
  let c5 = ismax 5
  putStrLn (show [c1, c2, c3, c5])

частичная функция ismax, вычислить maxel? Можно ли формально указать на правило о сложности частичных функций в Haskell? ДОЛЖЕН компилятор вызывать максимум один раз в приведенном выше примере? Иными словами, сохраняет ли частичная функция ссылки на предыдущие вызовы для внутренних предложений where?

У меня есть код, связанный с процессором, который не работает приемлемо, и я ищу возможные ошибки в своих рассуждениях о сложности.

22
задан Don Stewart 7 May 2011 в 03:20
поделиться