Haskell 错误:表达式为‘;det&x2019;有不同数量的论点

Haskell 错误:表达式为‘;det&x2019;有不同数量的论点,haskell,Haskell,我试图计算行列式,我有det函数定义如下: det :: (Double,Double) -> (Double,Double) -> Double det _ = 0.0 det [] = error "its Empty!" det [x] = error "contains only one point!" det (x1, y1) (x2, y2) = (x1*y2 + x2*y1) 我得到以下错误 Equations for ‘det’ have different num

我试图计算行列式,我有
det
函数定义如下:

det :: (Double,Double) -> (Double,Double) -> Double
det _ = 0.0
det [] = error "its Empty!"
det [x] = error "contains only one point!"
det (x1, y1) (x2, y2) = (x1*y2 + x2*y1)
我得到以下错误

Equations for ‘det’ have different numbers of arguments
      PolygonArea.hs:11:1-11
      PolygonArea.hs:14:1-39
Failed, modules loaded: none.

首先,类型
(Double,Double)
始终是两个
Double
s的一对,而不是空列表或单例列表。其次,正如错误消息所说,您的
det
案例需要具有相同数量的参数,但前三个案例给出了一个参数,第四个案例给出了两个参数

修好所有这些,你会得到

det :: (Double, Double) -> (Double, Double) -> Double 
det (x1, y1) (x2, y2) = (x1 * y2 + x2 * y1)

首先,类型
(Double,Double)
始终是两个
Double
s的一对,而不是空列表或单例列表。其次,正如错误消息所说,您的
det
案例需要具有相同数量的参数,但前三个案例给出了一个参数,第四个案例给出了两个参数

修好所有这些,你会得到

det :: (Double, Double) -> (Double, Double) -> Double 
det (x1, y1) (x2, y2) = (x1 * y2 + x2 * y1)

好的,我知道你们在说什么,但你们如何检查列表是否为空,或者它只包含一个点?根本并没有列表!您已经定义了函数,因此它只能接收两对数字。好的,我明白您的意思,但如何检查列表是空的,还是只包含一个点?根本没有列表!您已经定义了函数,因此它只能接收两对数字。