SML val 'a grupper = fn: int ->' a list -> 'a list list - PullRequest
0 голосов
/ 20 октября 2011

Я хочу создать функцию типа 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

помогите, пожалуйста.

1 Ответ

3 голосов
/ 20 октября 2011

Вы должны использовать как 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)))
...