haskell列表理解不终止

haskell列表理解不终止,haskell,Haskell,我有密码: import Data.List triangles :: [Int] triangles = takeWhile (\n -> factors n /= 0) [n * (n + 1) `div` 2 | n <- [1..]] triangles' = takeWhile (/= 0) [n * (n + 1) `div` 2 | n <- [1..]] intSqrt :: Int -> Int intSqrt = floor . sqrt . f

我有密码:

import Data.List

triangles :: [Int]
triangles = takeWhile (\n -> factors n /= 0) [n * (n + 1) `div` 2 | n <- [1..]]
triangles' = takeWhile (/= 0) [n * (n + 1) `div` 2 | n <- [1..]]

intSqrt :: Int -> Int 
intSqrt = floor . sqrt . fromIntegral

factors :: Int -> Int 
factors n = 2 * length facs
    where facs = takeWhile (<= intSqrt n) [x | x <- [1..], n `mod` x == 0]
导入数据。列表
三角形::[Int]

三角形=takeWhile(\n->factors n/=0)[n*(n+1)`div`2 | n问题是
factors 1
不会终止。
takeWhile
查看输入,直到找到大于
intSqrt 1
的因子,但没有这样的因子

您可以简化列表理解,以避免使用
takeWhile

facs = [x | x <- [1..intSqrt n], n `mod` x == 0]

facs=[x | x问题在于
因子1
没有终止。
takeWhile
查看输入,直到找到大于
intSqrt 1
的因子,但没有这样的因子

您可以简化列表理解,以避免使用
takeWhile

facs = [x | x <- [1..intSqrt n], n `mod` x == 0]

facs=[x | x这是怎么在我发布后第二次被否决的?!我也想知道为什么它被否决了..我确实在提交之前收到了修改标题的警告,但如果自动被否决,那就糟了我认为没有这样的功能..不管怎样,对你的问题.你确定
[n]生成的任何数字吗(n+1)
div`2 | n@rem不是落选者,但我想说原因可能是你在这篇文章中实际上没有问题。你的标题也非常糟糕。So的用户真的更喜欢语法好、措词好的帖子。首先,如果你用“haskell”。再说一次,我不是投你反对票的人,我只是想批评一下别人对你的文章可能有什么错误,以便将来你可以尽量避免这些错误。更好的问题,即使是简单的解决方案,对每个人都会有好处=)这是怎么在我发布后第二次被否决的?!我也想知道为什么会被否决..我确实在提交之前收到了修改标题的警告,但如果自动被否决,那就糟了..我认为没有这样的功能..总之,对你的问题.你确定
[n*(n+1)生成的任何数字吗
div`2 | n@rem不是落选者,但我想说原因可能是你在这篇文章中没有问题。你的标题也很糟糕。So的用户真的更喜欢语法好、措辞好的帖子。首先,如果你在标题中加上“haskell”标签,那么在标题中加上“haskell”并没有多大帮助再一次,我并不是投你反对票的人,我只是想批评一下别人对你的文章可能有什么错误,以便将来你能尽量避免这些错误。更好的问题,即使是有简单解决方案的问题,对每个人来说都会更好=)