所以我在我的.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))
答案 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以及错误消息提供大量信息,即使它们最初可能令人生畏。