2014-03-06 94 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])

哦,和我應該能夠找到該溶液而不使用輔助功能

這裏是據我已經得到了:

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 *) 

通常,我會使用一個輔助功能與一個額外的參數來存儲對名單我建的,但不能在這裏完成。我有點卡住

回答

2

您應該使用let in建設相匹配的遞歸調用的返回值:

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);; 
相關問題