Haskell 哈斯克尔警卫公司

Haskell 哈斯克尔警卫公司,haskell,Haskell,对不起,我的第一篇文章 a。输入一个整数值 b。如果输入数小于零,则输出为负 c、 如果输入数字正好为零,则输出零 d。如果输入数大于零,则输出自然 谁能帮帮我吗。我做错了什么 snum :: Int->String snum x | x > 0 = "Natural" | x == 0 = "Zero" | otherwise = "Negative" 为什么我会想,‘因为哈斯克尔告诉我;) snum 4或0或(-5)给了我 你的代码是正确的,对我很有用。 可能

对不起,我的第一篇文章

  • a。输入一个整数值
  • b。如果输入数小于零,则输出为负
  • c、 如果输入数字正好为零,则输出零
  • d。如果输入数大于零,则输出自然
谁能帮帮我吗。我做错了什么

snum :: Int->String
snum x
 | x > 0   = "Natural"
 | x == 0   = "Zero"
 | otherwise = "Negative"
为什么我会想,‘因为哈斯克尔告诉我;)

snum 4或0或(-5)给了我


你的代码是正确的,对我很有用。
可能您担心的是负数,例如,对于像
snum-1
?在这种情况下,请记住必须将它们括在括号中,否则haskell会认为
-
是用于减法的二进制中缀运算符(因此它将尝试从
snum
中减去1,这是一个函数,而不是一个数字):
snum(-1)=“负”
将返回
True

已经有一个预定义的值
snum

可能的解决办法:

  • 重命名你的函数,例如

    mySnum :: Int->String
    mySnum x
     | x > 0   = "Natural"
     | x == 0   = "Zero"
     | otherwise = "Negative"
    
  • 通过在程序开始处添加此行来隐藏预定义的
    snum

    import Prelude hiding (snum)
    

  • 但我很好奇:我以前从未听说过预定义的
    snum
    。您使用什么来运行Haskell程序?GHC?拥抱?还有别的吗?哪个版本?

    没有人能帮助你,因为没有办法知道你做错了什么@igrec:请你解释清楚。那段代码到底有什么问题?我试图回答你,但这只是一个猜测,因为我真的不知道如果你不告诉我们:)@igrec为什么你认为你做错了什么?你做了一些事情,你期望结果会发生一些事情,但相反,其他事情会发生。你需要告诉我们这三条信息。哇!!!我花了两个小时思考怎么了?谢谢各位!关于“snum”,我已经更改了在线发布的功能名称。我的脚本上有另一个名称;))我真傻,再一次谢谢这是我的演讲者的伎俩之一。作业创建功能:signum;奇怪,你注意到了吗?该死我所要做的就是改变名字sigNum;奇偶。让学生记住内置函数的奇怪方式。:)该死这是第二次
    import Prelude hiding (snum)