在下面的代碼:是否在Haskell中定義了部分函數或curried函數?
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子句的引用?
我有一些CPU的綁定代碼不能令人滿意地執行,我在尋找可能的錯誤在我的推理複雜性。
個人資料。檔案資料檔案。 – delnan 2010-11-12 16:47:26
讓我補充@delnan所說的[建議您分析代碼](http://book.realworldhaskell.org/read/profiling-and-optimization.html)。 – 2010-11-12 16:50:04
從何時在Haskell中定義性能?也許你的意思是Haskell的一些實現。 – ephemient 2010-11-13 08:02:23