2014-03-06 6 views
1

중간 고사를 공부하고 오래된 시험 문제를보고있었습니다. 이것은 하나의 해결책이 게시 된 날 유세 가지고 있지 않습니다OCaml 재귀 함수 int list -> int -> (int list * int list)

partition : INT 목록 -> INT -> (INT 목록 *의 INT 목록) 두 개의리스트, 하나 덜 모든 요소를 ​​포함로의 첫 번째 인수를 분할 두 번째 인수는 이고 두 번째 인수는 이상의 다른 모든 요소가 있습니다. partition [5 2 10 4] (4) = ([2] [5; 10; 4)

제로와 I가 사용하지 않고 용액 을 찾을 수 있도록되어있어 내가 짓고 있어요리스트의 쌍을 저장하기 위해 추가 매개 변수와 함께 보조 기능을 사용하는 것, 일반적으로

let rec partition l n = match l with 
    | [] -> ([], []) (* must return this type *) 
    | x :: xs -> if x < n then (* append x to first list, continue recursing *) 
        else (* append x to second list, continue recursing *) 

있지만 : 보조 기능 여기

는 지금까지 내가받은 것 같다 여기서는 할 수 없다.

let rec partition l n = match l with 
    | [] -> ([], []) 
    | x :: xs -> let a, b = partition xs n in 
        if x < n then (x::a), b 
        else   a, (x::b);; 
: 나는 조금

답변

2

당신은 재귀 호출의 반환 값과 일치하도록 let in 구조를 사용한다

붙어있어
관련 문제