В следующем коде:
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? ДОЛЖЕН, чтобы компилятор вызывал максимум один раз в приведенном выше примере? Иными словами, выполняет ли частичная функция ссылки на предыдущие вызовы для внутренних, где предложения?
У меня есть некоторый код, связанный с ЦП, который не выполняется приемлемо, и я ищу возможные ошибки в рассуждениях о сложности.