即时通讯学习haskell和递归,我有这个功能
type Coordenada = (Int,Int)
type Skyline = [Coordenada]
combina :: (Skyline, Skyline) -> Skyline
combina ([], x) = x
combina (x, []) = x
combina ((ii, ia):ri,(di, da):rd) = subcombina((ii, ia):ri,0) ((di, da):rd,0)
where subcombina ((ii, ia):ri, ih) ((di, da):rd, dh)
| ii < di = (ii, max ia dh) : subcombina(ri,ih) ((di, da):rd, dh)
| otherwise = (di, max ih da) : subcombina((ii, ia):ri, ih) (rd, dh)
我得到了这个错误:
Exception: Skyline.hs:(26,11)-(28,92): Non-exhaustive patterns in function subcombina
巫婆模式我不见了?
解释功能:
combina(merge)接收元组列表的元组,如果其中一个为空,则结果为另一个。 然后,对于元组的左列表,按元素和尾部获取第一个元组,对于右元组获得相同的元素,使用此值调用subcombina(submerge)和0
subcombina与每个元组(tuple1,int1)(tuple2,int2)的整数值组合使用相同的组合:
如果左元组头部的左值大于右元组头部的左值,则返回一个元组(左元组的头部的第一个值,整数的最大值)与无头部的左列表的子组合的递归调用连接与父右元组相同的整数与父元组相同的整数相同的整数。 如果没有类似的东西。
我希望它得到很好的解释。
答案 0 :(得分:2)
你是名单上的模式匹配
subcombina ((_:_), (_:_)) = ..
匹配非空元组,此错误/警告告诉您的是您忘记处理
等案例subcombina ([], something) = ..
subcombina (something, []) = ..
subcombina ([], []) = ..