哈斯克尔卫队和公司

时间:2012-04-03 11:36:46

标签: haskell

对不起我的第一篇文章

  • 一个。输入一个整数值;
  • 湾如果输入数小于零,则输出为负;
  • c.outputs如果输入数字正好为零,则为零;
  • d。如果输入数字大于零,则输出为自然。
有人可以帮助我。我做错了什么?

snum :: Int->String
snum x
 | x > 0   = "Natural"
 | x == 0   = "Zero"
 | otherwise = "Negative"

为什么我会这么想,'cos haskell告诉我的话;)

snum 4或0或(-5)给我

Ambiguous occurrence `snum'
It could refer to either `Main.snum', defined at snum.hs:2:1
                      or `Prelude.snum', imported from Prelude

2 个答案:

答案 0 :(得分:5)

已经有预定义的值snum

可能的解决方法:

  1. 重命名您的功能,例如

    mySnum :: Int->String
    mySnum x
     | x > 0   = "Natural"
     | x == 0   = "Zero"
     | otherwise = "Negative"
    
  2. 隐藏预定义的snum,在程序开头添加此行:

    import Prelude hiding (snum)
    
  3. 但我很好奇:我以前从未听说过预定义的snum。你用什么来运行你的Haskell程序? GHC?拥抱?别的什么?哪个版本?

答案 1 :(得分:4)

您的代码是正确的,适合我。 也许你关注的可能是负数,例如对于snum -1这样的来电?在这种情况下,你必须将它们包装在括号中,或者haskell会认为-是减法的二进制中缀运算符(因此它会尝试从snum减去1,这是一个函数而不是数字):snum (-1) == "Negative"将返回True