2012-01-03 86 views
0

我想列出所有除n的整数。这是一个家庭作业问题。到目前为止,我已经做到了。Haskell过滤函数错误

divisors :: Int -> [Int] 
divisors n | n < 1 = [] 
      | otherwise = filter (\n -> n `mod` x == 0) [1..n] 
      where x = [1..n] 

我知道这是错误的,但我没有得到正确的过滤器谓词。我不知道这样做的语法。当然我不能用n mod n,因为那只是列出了所有元素1到n。

+0

的说法你不只是发布关于该问题? – 2012-01-03 13:18:07

+0

没有这是一个关于如何使用过滤器语法的不同问题。这是一个更具体的问题,我建议为此询问一个新问题。抱歉。 – Amjad 2012-01-03 13:19:45

+0

几天前写了一个类似的帖子:http://stackoverflow.com/questions/8701662/haskell-finding-divisors-of-an-integer – 2012-01-03 13:21:25

回答

4

您想检查mod n k == 0是否每个k从1到n。该n是固定的(的divisors参数)和k变化,即那是什么应该是lambda表达式

| otherwise = filter (\k -> n `mod` k == 0) [1 .. n] 
+0

是的!那工作。 n是固定的,但是k不同,我只需要在谓词定义中使用\ k。谢谢! – Amjad 2012-01-03 13:28:28

0

我不知道你正在尝试做的,但mod类型是

mod :: Integral a => a -> a -> a 

您有积分参数和积分参数列表来调用它。