[英]Why does this Haskell code fail?
我有以下代碼(與歐拉計划問題34有關):
fac :: Int -> Int
fac = foldr1 (*) . enumFromTo 1
fe :: Int -> Bool
fe = (==) =<< (sum . map fac . digits 10)
fes :: [Int]
fes = filter fe [3..]
fac
可以正常工作, fe
可以正常工作,但是fes
:
*** Exception: Prelude.foldr1: empty list
有趣的是,如果我以145開始列表( fe
在此處返回True),則該列表適用於該數字,然后引發Exception。
為什么此代碼失敗? 似乎是完全正常的filter
應用程序,其功能顯然可以正常工作,並且可以單獨使用該函數的常規數字列表。
您的fac
以數字0
失敗,其列表為空。 你可以試試
fac = foldr (*) 1 . enumFromTo 1
順便說一下, foldl'
(來自Data.List
)可能比這里的foldr
好,而且還有一個預定義的product
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.