2013-09-29 2 views
0

목록을 취하는 함수를 만들고, 부울 값을 제공하는 함수를 적용하고 목록을 하나의 튜플을 만드는 두 목록으로 구분합니다.두 함수에 적용 할 때 터플 형식의 목록으로 돌아 가기

예를 들어 표현이 분리되어 있다면 odd [1,2,3,4,5]입니다. 출력은 ([1,3,5],[2,4])입니다.

내 코드이 멀리 : 빈 단일 목록에 대한

separate:: (a->Bool) -> [a] -> ([a], [a]) 
separate func []  = ([], []) 
separate func [x]  = if(func x == True) then ([x], []) else ([], [x]) 
separate func (x:xs) = if(func x == True) then (x : (fork func xs), []) else ([], x : (fork func xs)) 

처음 두 부분은 예상대로 작동하지만, 함수의 실제 대부분은 작동하지 않습니다. 두 개의 서로 다른 목록을 작성하는 동시에 표현식을 재귀 적으로 수행하는 방법을 잘 모르겠습니다.

필자는 내장 된 필터 및지도 기능을 사용해 보았지만 실제로 성공하지 못했습니다. 누군가 어떻게 이것이 성취 될 수 있는지에 대한 제안이 있다면, 나는 그것을 고맙게 생각할 것이다!

답변

4

hoogle을 사용하여 서명을 알고있는 기능을 찾을 수 있습니다. 답변 중 하나

hoogle (a->Bool) -> [a] -> ([a], [a]) 반환 partition :

Prelude Data.List> partition odd [1,2,3,4,5] 
([1,3,5],[2,4]) 
+1

그것의 [소스] (http://hackage.haskell.org/package/base-4.6.0.1/docs/src/Data-List. html # 파티션)은 Hackage에서 액세스 할 수 있습니다. –

+0

그레이트 리소스! 고맙습니다, 나는 Hoogle이 존재한다는 것을 전혀 몰랐습니다! – ZAX

관련 문제