1

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

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

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

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

我以不同的方式尝试过,但我找不到从函数返回两个单独值的方法。此外,由于我想拆分的值在多个内部列表中重复,我只想在它是列表的头部时拆分,而不是其他时间。我是这样尝试的:

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

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

4

1 回答 1

3

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

首先定义如何从列表的头部拆分“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"]
于 2016-10-15T20:48:17.107 回答