2012-01-03 1 views
0

nを分けるすべての整数をリストしたい。これは宿題に関する質問です。これまで私はこれをしてきました。ハスケルフィルター関数エラー

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

私はこれが間違っていることは知っていますが、私は正しいフィルタ述語を得ていません。私は構文をどのようにこれを行うためのものであるかわかりません。私はmod nを使用することはできません。これは、1からnまでのすべての要素をリストしているためです。

+0

の引数がどうあるべきかということであるあなただけのこのについての質問を投稿しませんか? –

+0

いいえ、それはフィルター構文の使い方に関する別の質問でした。これはより具体的な質問であり、私はこれについて新しい質問をするように提案されました。ごめんなさい。 – Amjad

+0

同じような投稿が数日前に書かれました:http://stackoverflow.com/questions/8701662/haskell-finding-divisors-of-an-integer –

答えて

4

それぞれkについてmod n k == 0が1からnまでであるかどうかをチェックします。 nは(divisorsの引数)を固定し、kが変化する、すなわち、ラムダ式

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

はい!それはうまくいった。 nは固定されていますが、kは変化しますので、述語定義で\ kを使用するだけでした。ありがとう! – Amjad

0

私はあなたがやろうとしているのか分からないが、modの種類は、あなたが積分引数と一体型引数のリストでそれを呼び出す

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

です。