在Haskell中引入形状数据类型
我在一本书中看到了这个练习,我正在尝试做它,但我有一个问题 我想做的是定义一个适合表示三角形、正方形和圆形的数据类型形状,然后定义一个函数area::Shape->Float,它返回给定形状的面积 我现在的代码:在Haskell中引入形状数据类型,haskell,algebraic-data-types,Haskell,Algebraic Data Types,我在一本书中看到了这个练习,我正在尝试做它,但我有一个问题 我想做的是定义一个适合表示三角形、正方形和圆形的数据类型形状,然后定义一个函数area::Shape->Float,它返回给定形状的面积 我现在的代码: data Shape = Triangle Float Float Float | Square Float | Circle Float area :: Shape -> Float area (Triangle a b c) = sqrt (s*(
data Shape = Triangle Float Float Float
| Square Float | Circle Float
area :: Shape -> Float
area (Triangle a b c) = sqrt (s*(s-a)*(s-b)*(s-c))
where
s = (a+b+c)/2
area Square d = d*d
area Circle r = pi * r^2
我得到的错误是:
Haskell.hs:4:1:
Equations for `area' have different numbers of arguments
Haskell.hs:(4,1)-(6,37)
Haskell.hs:7:1-19
Failed, modules loaded: none.
我看到的解决方案是:
data Shape = Triangle Float Float Float
| Square Float | Circle Float
area :: Shape -> Float
area ( Triangle a b c )
= triarea a b c
area ( Square d )
= d * d
area ( Circle r )
= pi * r^2
triarea a b c
= sqrt( s * (s-a) * (s-b) * (s-c) )
where
s = (a+b+c)/2
这与我的实现有什么不同??我的错误是什么意思
谢谢:您需要在括号中围绕正方形d和圆圈r。否则,它们将被解析为两个参数,而不是一个
例如,请参见:函数应用程序绑定比任何中缀运算符都要紧密。用火书的形式把它烧进你的大脑。这在这里并不完全相关;相反,函数应用程序是左关联的,即使在定义的左端也是如此。您需要在括号中围绕正方形d和圆圈r。否则,它们将被解析为两个参数,而不是一个
例如,请参见:函数应用程序绑定比任何中缀运算符都要紧密。用火书的形式把它烧进你的大脑。这在这里并不完全相关;相反,函数应用程序是左关联的,即使在定义的lhs上也是如此。在模式匹配中,您需要围绕正方形d和圆形r的排列,类似于三角形。这是一个愚蠢的错误,谢谢!!在模式匹配中,您需要围绕正方形d和圆形r的排列,类似于三角形。这是一个愚蠢的错误,谢谢!!