2013-03-16 104 views
0

我正在嘗試使用Haskell(我也是全新的),並且每次嘗試使用ghci編譯時,我都會得到Not in scope: 'isNumber',我做錯了什麼?在Haskell中檢測整數

digits :: [a] -> Bool 
digits a = digits a True 


digits1 :: [a] -> Bool -> Bool 
digits1 [] False  = False   
digits1 [] True  = True    
digits1 (l:ls) True = digits ls isNumber l 
digits1 (l:ls) False = False 
+3

您可能會喜歡'digits = all isNumber'。 – 2013-03-16 22:32:26

+0

好吧我試過這段代碼: digits :: String - > Bool digits = all isNumber 但是每當我嘗試用數字執行它時:「String」如果String爲字母而'String'爲'沒有範圍' (數字字符串)「,如果它是數字(1123)等等是什麼原因造成的? – user2057017 2013-03-17 10:59:07

+0

如果你想要一個'字符串'字面值,就像在'digits「foo」'或'digits「123」'中一樣,不要忘記把參數放在雙引號中。 – 2013-03-17 13:15:39

回答

7

因爲isNumberData.Char模塊,您沒有導入它定義你得到錯誤信息。導入它將修復該錯誤。

雖然這不是你唯一的問題。另外一個問題是digits ls isNumber l用四個參數調用digits,但是你已經定義了digits只有一個參數。

同樣,電話digits a True調用digits有兩個參數 - 同樣的問題。你可能打算在這裏寫digits1 a True,因爲digits1確實帶有兩個參數。

最後,digitsdigits1被定義爲將任意列表作爲參數,但您似乎想要在列表的元素上調用isNumber。由於isNumber是一個僅適用於Char s的函數 - 不是任意值 - 您應該取Char s(即String)的列表。