在haskell中编织列表

Wal*_*erC 1 merge haskell list currying pattern-matching

我试图创建一个函数来编织两个列表一起例如 [1,3,5][2,4]- >[1,2,3,4,5]

我得到了我必须做的基本原则并检查但是我遇到了所需类型的问题

interleave :: ([a],[a]) -> [a] 
Run Code Online (Sandbox Code Playgroud)

关于不同数量的参数给出错误.到目前为止,这个版本给了我最少的错误

interleave ([],[]) = []
interleave (xs,[]) = [xs]
interleave ([],ys) = [ys]
interleave (x:xs) (y:ys) = x : y : interleave xs ys
Run Code Online (Sandbox Code Playgroud)

我已经尝试过搞乱参数和输出几次但是我对haskell语法不熟悉所以我真的不知道我哪里出错了

第2部分:我还有一个测试文件,以确保功能是正确的,所以如果我在这之后仍然遇到麻烦(因为我得到类似的输入/输出不匹配导致我改变到我现在拥有的)我也可能会发布该代码以获取帮助

Cod*_*ice 5

除非您只需要一个参数,否则我认为更改所有情况以获取两个参数会更有意义:

interleave [] [] = []
interleave xs [] = xs
interleave [] ys = ys
interleave (x:xs) (y:ys) = x : y : interleave xs ys
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下interleave xs [],您最初返回[xs].这是一个包含名为的列表的列表xs.相反,你应该xs直接返回.同样涉及的案件ys.