未定义的神秘变量和fourEquals

时间:2014-08-23 10:46:33

标签: haskell

所以我在我的.hs文件中定义了两个变量:

fourEqual
    :: Int -> Int -> Int -> Int -> Bool
fourEqual m n p q =((m==n) && (n==p) && (p==q))

mystery 
    :: Int -> Int -> Int -> Bool
mystery m n p = not((m==n) && (n==p))

但不断得到

ERROR - Undefined variable "fourEqual"

和神秘一样,我不知道为什么。该文件已成功上传到Hugs ...以及我之前在同一文件中定义的所有其他变量,完全正常,但这两个。

是否有一些我没有看到导致此错误的原因?

所以这是我的.hs文件:

module FirstScript where
size 
    :: Integer
size = 12+13

-- The function to square an integer.

square 
    :: Int -> Int
square n = n*n

-- The function to double an integer.

double 
    :: Integer -> Integer
double n = 2*n

-- An example using double, square and size.

example
    :: Int
example = double(size - square(2+2))

-- The function of a square of double.

{-squareOfDouble 
    :: Integer -> Integer
squareOfDouble n = square (double n)-} 

-- The function of double of square.

doubleofSquare
    :: Integer -> Integer
doubleofSquare n = double (square n)

threeDifferent 
    :: Int -> Int -> Int -> Bool
threeDifferent m n p = (m==n) && (n==p)

fourEqual
    :: Int -> Int -> Int -> Int -> Bool
fourEqual m n p q =((m==n) && (n==p) && (p==q))

mystery 
    :: Int -> Int -> Int -> Bool
mystery m n p = not((m==n) && (n==p))

2 个答案:

答案 0 :(得分:3)

使用GHC编译器检查整个文件后,这些是我的评论:

  • 您的代码无法编译。它抛出以下编译错误: Couldn't match expected type Int with actual type Integer
  • 看到此错误:ERROR - Undefined variable "fourEqual"

要解决第一个编译器错误,请在其类型签名中将所有Integer类型更改为Int,或使用fromIntegral执行正确的类型转换。 此外,建议您不要使用HUGS。它已经成为一个过时的编译器,它的最后一个版本发布于2006年。请参阅下面的AndrewC评论。 GHC是一个更现代的编译器,我建议你使用它。或者另一种推荐的方法是使用Haskell Platform,其实际上是包含电池的GHC。您还可以尝试FPComplete online IDE,如果您不想在本地安装任何软件,它可以提供编写Haskell代码的绝佳方法

答案 1 :(得分:1)

我将您的代码放入文件ab.hs并加载到GHCI中。编译失败的输出如下。

错误消息基本上是说你的类型不匹配,即Int和Integer不可互换。例如,您的示例函数具有类型:: Int,但是在该函数中,您调用double,其类型为:: Integer。这意味着示例的返回类型将是double的返回类型。它们的类型不匹配,因此文件不会编译。对函数使用相同的类型,它将被编译。

我建议更改为GHCI以及错误消息提供大量信息,即使它们最初可能令人生畏。

enter image description here