2011-10-20 31 views
0

我想創建一個有類型的功能int -> 'a list -> 'a list listSML VAL '一個grupper = FN:INT - >' 列表 - >「名單列表

函數調用:

grupper 2 [3, 1, 4, 1, 5, 9]應當返還[[3, 1], [4, 1], [5, 9]]

grupper 4 [3, 1, 4, 1, 5, 9]應當返還[[3, 1, 4, 1], [5, 9]]

grupper 42 [3, 1, 4, 1, 5, 9]應返回[[3, 1, 4, 1, 5, 9]]

我得到這個至今

fun grupper _ [] = [] 
| grupper n (x::xs) = if n > length(x::xs) then [x::xs] 
         else [List.take(x::xs, n)] @ grupper (n) xs 

一些幫助,請。

+0

你應該總是避免使用添加(@),尤其是當你在做的第一個元素列表,只是將其追加。在這裏(如pad所示),您可以將'grupper'返回的列表中的元素與cons運算符(::)一起放入。 –

回答

3

你應該同時使用List.takeList.drop

fun grupper _ [] = [] 
    | grupper n xs = if n >= length xs then [xs] 
        else List.take(xs, n)::(grupper n (List.drop(xs, n))) 
相關問題