我目前正在努力解决在列表列表中将当前列表拆分为两个的问题。例如,如果我有:
[[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工作。
答案 0 :(得分: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"]