Я написал функцию, которая, кажется, работает нормально. (На второй мысли, он пропустил, соединяющий две первые группы ... Я буду думать об этом больше.)группировка отсортированных по возрастанию целых последовательностей - изменен
import Data.List (groupBy)
makeGroups xs =
map concat $ groupBy (\a b -> head b == last a + 1) (groupBy mGroups0 xs)
where mGroups0 = \a b -> a == length xs && elem b [1,2]
|| b /= length xs && b == a + 1
ВЫВОД:
*Main> makeGroups [3,4,5,6,7,8,1,9,10,2]
[[3,4,5,6],[7,8],[1],[9,10,2]]
(Спасибо всем за ответ о вкладках ... теперь я прошу только общий гений кодирования)
Возможно ли быть более эффективным/удобным способом группировки отсортированных восходящих целых последовательностей в списке (сохраняя исходный порядок)?
Единственное дополнительное условие заключается в следующем:
the possible groups [length xs] [1] [2] [1,2] [length xs,1] [length xs,2]
must be separated, but [length xs, 1, 2] should join any larger sequence.
Любой причина, почему вы пишете локальные функции с синтаксисом лямбды? Это немного раздражает, если не сказать больше. – Ingo
@Ingo Это не важно для меня. Я просто подумал, что попробую на этот раз проверить, работает ли это вообще. –
Вторая догадка: есть ли у вас какие-либо символы табуляции в исходном коде? – Ingo