在Haskell中创建人物
我正在尝试在Haskell中创建数据类型“Figure”,此数据类型应具有多个值:在Haskell中创建人物,haskell,Haskell,我正在尝试在Haskell中创建数据类型“Figure”,此数据类型应具有多个值: 正方形(带参数长度) 三角形(带参数长度) 圆(带参数半径) 每个图形也应该有一种颜色(比如说黑白),这就是我的代码目前的样子,但这不起作用。 有人能帮我吗 class Figure_ a where perimeter :: a -> Double area :: a -> Double data Figure = forall a. Figure_ a => Figure a
- 正方形(带参数长度)
- 三角形(带参数长度)
- 圆(带参数半径)
class Figure_ a where
perimeter :: a -> Double
area :: a -> Double
data Figure = forall a. Figure_ a => Figure a
type Radius = Double
type Side = Double
type Color = String
data Circle = Circle Radius
data Triangle = Triangle Side
data Square = Square Side
instance Figure_ Circle where
perimeter (Circle r) = 2 * pi * r
area (Circle r) = pi * r * r
instance Figure_ Triangle where
perimeter (Triangle x y) = 2*(x + y)
area (Triangle x y) = x * y
instance Figure_ Square where
perimeter (Square s) = 4*s
area (Square s) = s*s
instance Figure_ Figure where
perimeter (Figure shape) = perimeter shape
对于所有的
forall
使用:
{-# LANGUAGE ExistentialQuantification #-}
此外,三角形接受两个参数,因此应如下所示:
data Triangle = Triangle Side Side
class Figure_ a where
perimeter :: a -> Double
area :: a -> Double
但是看看三角形的公式,我觉得你好像把它和矩形混淆了。此外,代码的缩进似乎不正确。您的代码应该如下所示:
data Triangle = Triangle Side Side
class Figure_ a where
perimeter :: a -> Double
area :: a -> Double
创建该typeclass的实例时也应遵循相同的缩进规则。对于
For all
使用:
{-# LANGUAGE ExistentialQuantification #-}
此外,三角形接受两个参数,因此应如下所示:
data Triangle = Triangle Side Side
class Figure_ a where
perimeter :: a -> Double
area :: a -> Double
但是看看三角形的公式,我觉得你好像把它和矩形混淆了。此外,代码的缩进似乎不正确。您的代码应该如下所示:
data Triangle = Triangle Side Side
class Figure_ a where
perimeter :: a -> Double
area :: a -> Double
创建该typeclass的实例时,也应遵循相同的缩进规则
我正在尝试在Haskell中创建数据类型“Figure”,此数据类型应具有多个值:
- 正方形(带参数长度)
- 圆(带参数半径)
data Figure = Square Double | ... | Circle Double
然后您可以定义如下函数:
area :: Figure -> Double
area (Square side) = side * side
area ... = ...
area (Circle radius) = pi * radius * radius
如果只需要一个数据类型,则不需要Haskell中的类。Haskell类用于在所有类都支持公共接口时具有多个数据类型
有一个原因,您更喜欢使用类和for all
构建,而不是仅使用数据的简单版本:在您的版本中,添加另一种未计划的图形更容易。如果您觉得需要这个,您可能需要阅读有关反模式的内容。但如果您只是想用Haskell来表示数字,我肯定会从一个简单的数据类型开始
我正在尝试在Haskell中创建数据类型“Figure”,此数据类型应具有多个值:
- 正方形(带参数长度)
- 圆(带参数半径)
为了避免考虑几何,我省略了三角形。无论如何,这些问题听起来像是你想要的:
data Figure = Square Double | ... | Circle Double
然后您可以定义如下函数:
area :: Figure -> Double
area (Square side) = side * side
area ... = ...
area (Circle radius) = pi * radius * radius
如果只需要一个数据类型,则不需要Haskell中的类。Haskell类用于在所有类都支持公共接口时具有多个数据类型
有一个原因,您更喜欢使用类和for all
构建,而不是仅使用数据的简单版本:在您的版本中,添加另一种未计划的图形更容易。如果您觉得需要这个,您可能需要阅读有关反模式的内容。但是如果你只是想用Haskell来表示数字,我肯定会从一个简单的数据类型开始。你说它不工作是什么意思?我得到了一个forall未知的错误。如果你使用的是ghc
,它将告诉您可以使用哪个选项来克服此错误。您认为它不起作用是什么意思?我得到了forall未知的错误。如果您使用的是ghc
,它将告诉您可以使用哪个选项来克服此错误。计算三角形的代码正确吗?还有,我如何计算边数?@user3501483不是数学论坛。要计算面积和周长,您需要获取更多参数作为输入。@user3501483要计算三角形的周长,您需要知道三角形的所有三条边,或者可以用来确定三角形的其他参数。计算三角形的代码正确吗?还有,我如何计算边数?@user3501483不是数学论坛。要计算面积和周长,您需要获取更多参数作为输入。@user3501483要计算三角形的周长,您需要知道三角形的所有三条边,或者可以用来确定三角形的其他参数。谢谢!是否有办法在“数据图”中添加长度等参数?在data Figure=Square Double |…
中,Double
是为所有正方形存储的参数类型。如果您想存储更多信息,只需在那里添加更多类型。例如,data Figure=Square Double Color |…
。这就是你所说的“添加长度等参数”吗?谢谢!是否有办法在“数据图”中添加长度等参数?在data Figure=Square Double |…
中,Double
是为所有正方形存储的参数类型。如果您想存储更多信息,只需在那里添加更多类型。例如,data Figure=Square Double Color |…
。这就是你所说的“添加长度等参数”吗?