2016-05-03 135 views
0

我有,将带从一个列表中的两个元件和从所述第二列表中的一个元件的功能,但有一个问题,如果该给定的列表仅具有一个元素:Haskell,一个列表中的两个元素后跟一个元素的其他列表? (模式匹配)

例如:

*Main> g2 [1] [5..10] 
[1] 

我想有这样的输出:

*Main> g2 [1] [5..10] 
[1,5] 

它适用于单超过1元:

*Main> g2 [1..5] [8..10] 
[1,2,8,3,4,9,5] 
*Main> g2 [1,2,3,4] [6,7,8,9] 
[1,2,6,3,4,7] 

我的代码:

g2 (x1:x2:xs) (y:ys) = x1:x2:y:(g2 xs ys) 
g2 (x1:[]) y = x1:[] 
g2 [] ys = [] 

我想我忘了一个模式。

+1

你的第二条直接说不会忽略的情况下。只是,它显然没有按照你的规范来处理它! - 注意,具有固定数量元素的列表通常使用列表语法而不是':'更好地构造/解构,即写入'[x 1]'而不是'x 1:[]'。 – leftaroundabout

回答

2

由于混淆你的问题是,这就是答案:

g2 (x1:x2:xs) (y:ys) = x1:x2:y:(g2 xs ys) 
g2 (x1:[]) (y:ys) = x1:y:[] 
g2 [] [] = [] 
-- Added missing patterns, don't know what the function is supposed to do here 
g2 [] (y:ys) = [] 
g2 (x1:xs) [] = [] 
+0

对不起,我的英文不是很好,有时候我的问题变得神秘:)如何确切地这两个模式g2 [](y:ys)= [] g2(x1:xs)[] = []解决问题? –

+2

我只是添加它们来覆盖所有可能的情况,所以你不会得到一个运行时错误,你的函数没有为这些参数定义。它只会返回'[]'然后 – Alistra

+0

Okey我明白,并且模式匹配有用,如果你想创建大型函数? (来自haskell初学者的问题,对不起) –

相关问题