2013-03-16 73 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)的列表。