在Haskell中求解方程

Sie*_*rra 4 haskell functional-programming

我必须做一个练习,我很丢失......我需要用多项式为Ord做一个实例.这是我的尝试:

data Pol = P [(Float,Int)] deriving Show

instance Ord Pol where
  (Pol a) > (Pol b)  = (maxGrado a) > (maxGrado b) || ((maxGrado a) == (maxGrado b) && (maxCoe a) > (maxCoe b))
  (Pol a) < (Pol b)  = (maxGrado a) < (maxGrado b) || ((maxGrado a) == (maxGrado b) && (maxCoe a) < (maxCoe b))

maxGrado :: [(Float,Int)] -> Int
maxGrado [] = 0
maxGrado ((c,g):xs) = g  

maxCoe :: [(Float,Int)] -> Int
maxCoe [] = 0
maxcoe ((c,g):xs) = c
Run Code Online (Sandbox Code Playgroud)

- 错误:

ERROR file:.\Febrero 2011.hs:32 - Undefined data constructor "Pol"
Run Code Online (Sandbox Code Playgroud)

这个错误非常愚蠢,但是一个小时试图解决它......任何人都可以帮助我吗?

谢谢!!

ham*_*mar 9

data Pol = P [(Int, Int)]
Run Code Online (Sandbox Code Playgroud)

在此声明中,Pol是类型构造函数,并且P是此数据类型的唯一数据构造函数.通常,数据类型可以有多个数据构造函数,这就是我们有这种区别的原因.

一个简单的规则是,无论何时谈论类型,都应该使用类型构造函数,而在谈论值时,应该使用数据构造函数.

在这种情况下,您应该Pol在实例头中使用,但P在函数的模式中使用.

instance Ord Pol where
  (P a) > (P b)  = ...
  (P a) < (P b)  = ...
Run Code Online (Sandbox Code Playgroud)

另请注意,类型构造函数和数据构造函数位于不同的名称空间中,并且从不在同一上下文中使用.这意味着他们可以使用相同的名称.

data Pol = Pol [(Int, Int)]
Run Code Online (Sandbox Code Playgroud)

这也行得通.