2014-12-03 3 views
0

숫자의 목록에서 모든 소수를 제거하는 wp (소수 없음) 함수를 작성하고 싶습니다. 따라서, wp [1, 2, 3, 4, 5, 6, 7] = [1, 4, 6].Haskell - 목록에서 소수를 제거합니다.

내가 이런 식으로 코딩 시도 : 그것을 컴파일 할 때

wp :: [Int] -> [Int] 
prime :: Int -> Bool 

prime n = if f n > 0 then False else True 
    where f n = foldl (\acc x -> if n `mod` x == 0 then acc = acc + 1 else acc = acc + 0) 0 [2..n-1] 
wp xs = filter (not.prime) xs 

를, 나는 오류 "입력 =에 구문 분석 오류"를 얻을하지만 난 내 구문 오류를 찾을 수 없습니다. 어떤 아이디어?

답변

1

acc = acc + x을 사용 중입니다. 대신 acc + 1 또는 acc + 0 (또는 실제로는 acc)으로 작성하면됩니다. 또한 맨 위에있는 C 스타일 목록보다는 함수 정의 맨 위에 함수 서명을 작성하는 것이 좋습니다.

마지막으로, wp은 결과에 1을 포함하지 않으므로 수동으로 포함시켜야합니다.

prime :: Int -> Bool 
prime n = if f n > 0 then False else True 
    where f n = foldl (\acc x -> if n `mod` x == 0 then acc + 1 else acc) 0 [2..n-1] 

wp :: [Int] -> [Int] 
wp xs = 1 : filter (not.prime) xs 
관련 문제