Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Haskell:改进列表联合_Haskell_Functional Programming - Fatal编程技术网

Haskell:改进列表联合

Haskell:改进列表联合,haskell,functional-programming,Haskell,Functional Programming,我想为两个图像创建一个union函数(使用字符串类型的列表创建)。我首先创建了一个结合两个列表的unionList函数 unionList :: String -> String -> String unionList xs ys = xs ++ foldl (flip delete) ys xs 这是可行的,但不是我想要的。 我希望它能像这样工作: input = unionList [’ ’,’ ’,’X’,’X’,’ ’] [’X’,’ ’,’X’,’ ’,’X’]

我想为两个图像创建一个union函数(使用字符串类型的列表创建)。我首先创建了一个结合两个列表的unionList函数

unionList :: String -> String -> String  
unionList xs ys =  xs ++ foldl (flip delete) ys xs
这是可行的,但不是我想要的。
我希望它能像这样工作:

input = unionList [’ ’,’ ’,’X’,’X’,’ ’] [’X’,’ ’,’X’,’ ’,’X’] 
output = "X XXX"
关于如何做到这一点的任何想法

编辑:我最终尝试创建两个图像的联合

image 1 = ["  XX  ",     image 2 = ["XX XX",         type Img = [String]
           " X  X ",                "  X  ",
           "  XX  "]                "XX XX"]          
^
例子

应该给我两个图像的并集。
定义为

imgUnion :: Img -> Img -> Img
也许有更好的方法可以做到这一点,但我尝试了几种方法,从中获得了一些乐趣

列表标题项上的模式匹配:

unionList1::String->String->String
unionList1('X':xs)(uiq:ys)='X':unionList1 xs ys
unionList1(uxs:xs)('X':ys)='X':unionList1 xs ys
unionList1(:xs)(:ys)='':unionList1 xs ys
联合列表1
卫兵

unionList2::String->String->String
联合名单2(x:xs)(y:ys)
|x==''=y:剩余
|y=''=x:剩余
|否则=x:休息
其中rest=unionList2 xs ys
unionList2[uU2][]
以及用
zipWith
提出的解决方案:

unionList3::String->String->String
unionList3=zipWith(\x y->如果x/='',那么x else y)
然后,可以在图像上使用以下联合函数之一:

imgUnion::[String]->[String]->[String]
imgUnion=zipWith unionList3
main::IO()
main=do
让img1=[“XX”,
“X X”,
“XX”]
img2=[“XX XX”,
“X”,
“XX XX”]
mapM_uuuu计算机网络(imgUnion img1 img2)
作为输出提供:

XXXXX
XX X
XXXXX

从一个只适用于长度为1的列表并使用模式匹配(在列表和
Char
literals)的解决方案开始。如果你不明白我的意思,谷歌“模式匹配haskell”。然后添加更多事例(以匹配空列表)并递归调用
unionList
,以支持任意长度的列表。查看
zipWith
@ReinHenrichs-我查看了zipWith并将其用于图像合并。但是我想首先让unionList函数按照上面的定义工作,并与zipWith一起使用。
unionList
是我建议您使用的函数。上面定义的函数是错误的,我不知道如何使它工作,因为它是错误的。请尝试使用
zipWith
执行它。我不想给你答案,因为这是家庭作业,它是用于UnionList函数的。我将如何将其包括在图像联合功能中。(问题中的编辑)我编辑了我的答案以包括您编辑的问题,这是您要找的吗?
imgUnion :: Img -> Img -> Img