在 Haskell 中的列表列表中拆分内部列表

Splitting up inner lists within a list of lists in Haskell

我目前正在努力解决将当前列表分成列表列表中的两个列表的问题。例如,如果我有:

[[A,B,C,F],[F,G,H,I]]

有什么简单的方法可以拆分第二个列表(因为 F 是头),这样你就可以得到

[[A,B,C,F],[F],[G,H,I]]

我以不同的方式尝试过,但我找不到从一个函数中 return 两个独立值的方法。此外,由于我想要拆分的值在多个内部列表中重复,所以我只想在它是列表的头部时拆分,而在其他任何时候都不想拆分。我是这样尝试的:

splitList [] = [];
splitList (F:xs) = [[F]] ++ [xs];
splitList x = [x];

然而,这显然 return 在整个列表中编辑了一个列表列表,导致它反过来不起作用,因为我将它映射到列表中的每个元素。任何帮助将不胜感激,因为我最近才开始在 Haskell.

工作

函数 return 一个值,但是这个值可以是一个列表或元组,例如,这样你就可以 return 多个值。

首先定义如何从列表的头部拆分 'F'。

splitF :: String -> [String]
splitF ('F':xs) = ["F", xs]
splitF xxs      = [xxs]

splitF "ABCF" ≡ ["ABCF"]
splitF "FGHI" ≡ ["F","GHI"]

现在将此函数映射到列表中。

map splitF ["ABCF","FGHI"] ≡ [["ABCF"],["F","GHI"]]

最后连接列表。

(concat . map splitF) ["ABCF","FGHI"] ≡ ["ABCF","F","GHI"]

concatMap splitF ["ABCF","FGHI"] ≡ ["ABCF","F","GHI"]