Haskell任务示例

vsdwdz23  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(205)

我在一本书上看到了这个练习,我正在尝试做,但无法进一步。
我尝试为数据类型实现一个函数

area_t :: p -> Double

返回一般三角形的面积。
数据类型Triangle定义函数“area_t”。
我的当前代码:

data Triangle = MTriangle {
                        tP1 :: Point,
                        tP2 :: Point,
                        tP3 :: Point}
                      

class Polygon p where
  area_t :: p -> Float


instance Polygon Point where

instance Polygon Triangle where
    area_t

错误

Couldn't match expected type ‘Float’
                  with actual type ‘Point -> Point -> Float -> Point’
    • The equation(s) for ‘area_t’ have three arguments,
      but its type ‘Point -> Float’ has only one
g6ll5ycj

g6ll5ycj1#

点的面积为0,因此Polygon Point的示例(如果将点视为多边形)应为:

instance Polygon Point where
    area_t _ = 0

那么你写的三角形面积的代码看起来不错,但是有两个问题:
1.您在三个独立的点而不是三角形上进行模式匹配
1.您正在生成一个点而不是一个普通浮点数
工作示例可能如下所示:

instance Polygon Triangle where
    area_t (MTriangle (MPoint x1 y1) (MPoint x2 y2) (MPoint x3 y3))
      = ((x2-x1)*(y3-y1) - (x3-x1)*(y2-y1))/2

相关问题