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 将新列从一个表组合到另一个表的函数_List_Haskell - Fatal编程技术网

List 将新列从一个表组合到另一个表的函数

List 将新列从一个表组合到另一个表的函数,list,haskell,List,Haskell,我需要一些关于两个问题的帮助: 如何实现两个表的简单水平并集? 像这样: table2table :: Table -> Table -> Table table1 = [["Zoe", "2", "1"], ["Mark", "2", "5"]] table2 = [["Zbir", "4", &qu

我需要一些关于两个问题的帮助: 如何实现两个表的简单水平并集? 像这样:

table2table :: Table -> Table -> Table

table1 = [["Zoe", "2", "1"], 
         ["Mark", "2", "5"]]

table2 = [["Zbir", "4", "7"], 
         ["Nels", "1", "3"]]

table2table = [["Zoe", "2", "1"], ["Zbir", "4", "7"], 
              ["Mark", "2", "5"], ["Nels", "1", "3"]]

似乎您想将两个列表混合在一起-一个简单的解决方案可能是

mix::[a]->[a]->[a]
混合xs[]=xs
混合[]ys=ys
混合(x:xs)(y:ys)=x:y:mix-xs-ys
表2表格::表格->表格->表格
表2表格=混合

注意这并没有真正考虑到“表”式表示,但实际上您只有一个列表列表,Haskell并不真正关心如何在编辑器中将该列表的部分写进行中。

对于执行这种组合的一般方法,您可以使用
concat。转置

> concat . transpose $ [table1, table2]
[["Zoe","2","1"],["Zbir","4","7"],["Mark","2","5"],["Nels","1","3"]]
如果您需要,它适用于两个以上的列表:

> concat . transpose $ [table1, table2, table1]
[["Zoe","2","1"],["Zbir","4","7"],["Zoe","2","1"],
 ["Mark","2","5"],["Nels","1","3"],["Mark","2","5"]]   -- manually formatted
transpose
将它们“按列”分组,
concat
将列表展平

混合列表的另一种方法是按照以下方式进行:

对于两个列表,结果与
concat相同。转置
,但列表越多,它们就不同了

> diagonal [table1, table2, table1]
[["Zoe","2","1"],["Zbir","4","7"],["Mark","2","5"],
 ["Zoe","2","1"],["Nels","1","3"],["Mark","2","5"]]

有一个可爱的技巧可以减少案例数量:在每次递归调用时交换参数<代码>混合[]ys=ys;混合(x:xs)ys=x:mix ys xs
> diagonal [table1, table2, table1]
[["Zoe","2","1"],["Zbir","4","7"],["Mark","2","5"],
 ["Zoe","2","1"],["Nels","1","3"],["Mark","2","5"]]