簡體   English   中英

為什么此Haskell代碼失敗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM