gpt4 book ai didi

haskell - 代数类型 - Haskell

转载 作者:行者123 更新时间:2023-12-01 08:21:48 28 4
gpt4 key购买 nike

我正在处理 Haskell 中的代数类型,根据工作表做一些练习。我得到了以下练习:

  1. Define an algebraic type Point for representing (the coordinates of) points in twodimensional space.

我的练习代码:

data Point = Point Float Float
deriving (Show)
  1. Using Point, define a modified version PositionedShape of the Shape data type which includes the centre point of a shape, in addition to its dimensions.

先前定义的形状数据:

data Shape = Circle Float |
Rectangle Float Float
deriving (Show)

我的练习代码:

data PositionedShape = PositionedShape Shape Point
deriving (Show)

现在我的问题是这个:

Define a function:

haskell move :: PositionedShape -> Float -> Float -> PositionedShape

which moves a shape by the given x and y distances

我对此的实现如下:

move :: PositionedShape -> Float -> Float -> PositionedShape
move (Shape (Point x y)) newX newY = Shape (Point newX newY)

这给我返回了这个错误:

Week8.hs:103:7: error: Not in scope: data constructor ‘Shape’ Failed, modules loaded: none.

谁能解释一下为什么会出现这个错误,我该如何解决?我对代数类型有点困惑,我尝试了很多东西,但似乎无法找到解决方案。

最佳答案

您需要在数据构造函数(如 CircleRectangle)上进行模式匹配,而不是像您现在尝试在类型构造函数上进行模式匹配(如 Shape )。对于 PositionedShape,它们恰好具有相同的名称,尽管你完全忘记了这个匹配项(事实上,你不需要关心内部的 Shape除了复制它之外)。此外,move 意味着将形状移动给定的距离,而不是将其移动到新的给定位置;

关于haskell - 代数类型 - Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803072/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com