2012-01-03 85 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 

您有積分參數和積分參數列表來調用它。