【发布时间】:2015-02-21 05:43:31
【问题描述】:
我正在编写一个使用特定公式计算 2 个列表的递归函数。 但我会简化函数,以便您了解我遇到的问题,因为这里的重点是检测列表的 []。
所以我有以下代码:
listSum::([Integer],[Integer])->Double
listSum ((x:xs),(y:ys))
| ((x:xs),(y:ys))==(x:[],y:[])=0.0
| otherwise = (((fromIntegral x)::Double)+((fromIntegral y)::Double)) + listSum ((xs),(ys))
我现在的输出
listSum([1,2],[1,2])
2.0
listSum([1],[1])
0.0
listSum([],[])
*** Exception: file.hs: .....: Non-exhaustive patterns in function ListSum
还有我想要的输出
listSum([1,2],[1,2])
6.0
listSum([1],[1])
2.0
listSum([],[])
0.0
我错过了什么?还是我写的太多了?
【问题讨论】:
-
您通过
[](例如myFunc [] = 0; myFunc (x:xs) = x + myFunc xs)上的模式匹配来检测列表的结尾 -
第一件事就是告诉GHC
-fwarn-incomplete-patterns。
标签: list haskell non-exhaustive-patterns