我想创建一个类型为int -> 'a list -> 'a list list
函数调用:
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 :(得分:3)
您应该同时使用List.take
和List.drop
:
fun grupper _ [] = []
| grupper n xs = if n >= length xs then [xs]
else List.take(xs, n)::(grupper n (List.drop(xs, n)))