我剛開始學習Haskell。我試圖在列表中找到一個x,其中score x
具有最大值。我嘗試了snd (maximum [(score x, x) | x <- codes])
這是可行的,但我想知道是否有更快的方法來做到這一點,而沒有實際存儲函數和值。Haskell:f(x)最大的列表中的x x
感謝您的任何建議!
我剛開始學習Haskell。我試圖在列表中找到一個x,其中score x
具有最大值。我嘗試了snd (maximum [(score x, x) | x <- codes])
這是可行的,但我想知道是否有更快的方法來做到這一點,而沒有實際存儲函數和值。Haskell:f(x)最大的列表中的x x
感謝您的任何建議!
不要擔心被存儲的分數 - Haskell和GHC的工作方式,他們不會。例如,編譯的程序'main = print(maximum [(2 * x,x)| x < - [1..100000000000] :: [Int]])'可能需要大約10-15分鐘才能運行,所以在小的,持續的記憶中,因爲編譯器會確定代碼和分數都不需要保留以獲得答案。 –
請注意,如果任何代碼具有相同的分數,則會通過選擇最大代碼來在它們之間進行選擇,但是'Ord'是爲該類型定義的。這可能是也可能不是你想要的。 – Carl
'snd。 maximumBy(比較fst)。 map(score &&& id)'也適用於非'Ord'類型。 –