2012-04-03 35 views
-4

對不起我的第一篇哈斯克爾警衛和Co

  • 一個。輸入一個整數值;
  • b。如果輸入數量小於零,則輸出負值;
  • c.outputs如果輸入數字恰好爲零,則爲零;
  • d。如果輸入數字大於零,則輸出自然數。

有人可以幫我。我究竟做錯了什麼?

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

,爲什麼我認爲,「因爲哈斯克爾這樣告訴我;)

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 
+4

沒有人可以幫助你,因爲沒有辦法知道你做錯了什麼。 http://sscce.org/ – Marcin 2012-04-03 11:39:11

+0

@igrec:請更好地解釋你自己。那段代碼的問題究竟是什麼?我試着回答你,但這只是一個猜測,因爲如果你不告訴我們,我真的不知道你對這段代碼有什麼期望:) – 2012-04-03 11:47:55

+1

@igrec你爲什麼認爲你做錯了什麼?你做了一些事情,你會期望發生一些事情,但相反,其他事情會發生。你需要告訴我們所有三條信息。 – dave4420 2012-04-03 11:49:49

回答

4

你的代碼是正確的,而且作品爲了我。 也許您的擔心可能與負數有關撥打電話snum -1?在這種情況下,你必須用括號括起來,否則haskell會認爲-是一個二進制減法運算符(因此它會嘗試從snum中減去1,這是一個函數而不是數字):snum (-1) == "Negative"將返回True

5

已經有一個預定義的值snum

可能的解決方法:

  1. 重命名功能,例如

    mySnum :: Int->String 
    mySnum x 
    | x > 0 = "Natural" 
    | x == 0 = "Zero" 
    | otherwise = "Negative" 
    
  2. 隱藏預定義的snum,通過在程序開始加入這一行:

    import Prelude hiding (snum) 
    

但我很好奇:我從來沒有聽說過的預定snum前。你用什麼來運行你的Haskell程序? GHC?擁抱?還有別的嗎?哪個版本?

+0

哇!我已經殺了兩個小時,想什麼是錯的?感謝男士們和女士們!關於'snum'我改變了在線發佈的函數名稱。它有另一個名字在我的腳本;))愚蠢的我,再次感謝 – igrec 2012-04-03 13:01:48

+0

@igrec:不要忘記接受他的回答;) (@dave:+1 btw) – 2012-04-03 14:06:58

+0

所以,你編輯錯誤信息? – pat 2012-04-03 14:46:17