我幾乎沒有haskell的知識,並試圖解決一些Project Euler問題。 在解決Number 5我寫了這個解決方案(對於1..10)haskell中「all」的表現
--Check if n can be divided by 1..max
canDivAll :: Integer -> Integer -> Bool
canDivAll max n = all (\x -> n `mod` x == 0) [1..max]
main = print $ head $ filter (canDivAll 10) [1..]
現在我發現,那all
實現這樣的:
all p = and . map p
不這意味着,條件是檢查每個元素?打破條件的第一個假結果不是很快嗎?這會使上面的代碼更快地執行。
感謝
我不認爲他的問題是,他並沒有意識到'和'短路,而是他認爲'地圖在'甚至'運行之前會經歷整個列表(因爲他不瞭解/不瞭解懶惰評估)。 – sepp2k 2010-07-17 15:37:56