0

我已经为复数创建了一个数据类型,并且我正在尝试为此数据类型创建一个 Num 实例。我一直在尝试添加 negate 行,因为它是我的 show 函数所必需的,但是我不断收到此错误 - “negate”不是数据构造函数。

这是该实例的代码:

instance Num Complex where
  (C u v) + (C x y) = (C (u+x) (v+y))
  (C u v) * (C x y) = (C (u*x) (-v*y)) + (C (v*x) (u*y))
  (C u v) - (C x y) = (C (u+(-x)) (v+(-y)))
  negate
  abs       (C x y) = C (root (x*x + y*y)) 0
  signum    (C x y) = if (x==0 && y==0) then 0 else 1
  fromInteger    n  = C (fromInteger n) 0

任何填写否定行的帮助将不胜感激。

4

1 回答 1

4

我认为您将其作为学习练习进行,否则您将简单地使用 Data.Complex,对吗?

因此,我将通过问您另一个问题来回答您的问题,而不是仅仅给您答案。

negate {-something-} = {-something-}

你能填写两个“某事”中的任何一个吗?如果你不能完全填满其中一个,这很公平,但要清楚你知道要填满的剩余空白在哪里。

顺便说一句,你的定义signum是错误的。(你应该拥有abs z * signum z = z所有的z。)

于 2013-05-16T11:54:27.937 回答