2012-01-03 4 views
0

n을 나눌 수있는 정수를 모두 나열하려고합니다. 이것은 숙제 문제입니다. 지금까지 나는 이것을했다.하스켈 필터 함수 오류

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

나는 이것이 잘못된 것이지만 올바른 필터 조건자를 얻지는 못한다는 것을 알고 있습니다. 구문을 이해하는 방법을 모르겠습니다. 그리고 당연히 모든 요소 1 ~ n을 나열하기 때문에 n mod 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 

입니다.