如何停止通过无限列表的函数

时间:2017-09-30 23:33:36

标签: haskell

我基本上试图解决Project Euler的问题编号5.我试图找到可以被1-10整除的最小数字。到目前为止,我有这个,我得到了正确答案,但如果我不停止,它会继续下去。一旦找到第一个号码,我怎么让它停止?

set2 :: (Int) -> [Int]
set2 x = [y | y <- [1..10], x `mod` y == 0]

divFunc = [x | x <- [1..], length(set2 x) == 10]

1 个答案:

答案 0 :(得分:4)

您可以使用head获取列表的第一个元素。

> head divFunc
2520

其他一些小评论:

  1. 一般情况下,人们建议不要使用head,因为它在空列表中失败。在这种特殊情况下没关系,因为你调用它的函数要么有一个元素(在这种情况下head很好),要么在产生任何有用信息之前无限期地思考(在这种情况下{{1}不会使情况变得更糟)。但要注意这个功能;在你使用它之前,你应该总是有一个安全的参数(比如上面的参数)。
  2. head是一个有趣的名字。它不是一种功能。
  3. 您可能希望查看divFunc功能。