Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在Haskell中拆分列表列表中的内部列表_List_Haskell_List Manipulation - Fatal编程技术网

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

List 在Haskell中拆分列表列表中的内部列表,list,haskell,list-manipulation,List,Haskell,List Manipulation,我目前正在努力解决一个问题,即在列表中将当前列表一分为二。例如,如果我有: [[A,B,C,F],[F,G,H,I]] 有没有简单的方法来拆分第二个列表(因为F是头)以便最终得到 [[A,B,C,F],[F],[G,H,I]] 我尝试了不同的方法,但是我找不到从函数返回两个独立值的方法。此外,由于我希望拆分的值在多个内部列表中重复,因此我只希望在它是列表头时拆分,而不是在其他时间拆分。我是这样尝试的: splitList [] = []; splitList (F:xs) = [[F]] +

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

[[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。

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

首先定义如何从列表的开头拆分“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"]
这似乎是一个XY问题: