うまくいきそうな関数を書きました。(よく考えてみると、最初の 2 つのグループを接続できていませんでした...もっと考えなければなりません。)
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.