2013-03-16 2 views
0

하스켈을 사용하려고합니다. (완전히 새로운 것입니다.) 그리고 ghci를 사용하여 컴파일하려고 할 때마다, 내가 무엇을 잘못하고있는 걸까요? Not in scope: 'isNumber'? isNumber는 당신이 그것을 가져 오지 않은 Data.Char 모듈에 정의되어 있기 때문에하스켈의 정수 감지하기

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'를 좋아할 수도 있습니다. –

+0

ok 잘이 코드를 시도 : digits :: String -> Bool digits = 모든 isNumber 하지만 숫자를 사용하여 실행하려고 할 때마다 : "String"문자가 문자이고 'No instance for (Num String) '(숫자 (1123) 등)이 원인이 무엇입니까? – user2057017

+0

'digits "foo"'또는'digits "123"'처럼'String' 리터럴을 원한다면 인수를 큰 따옴표로 묶어야합니다. –

답변

7

당신은 그 오류 메시지가 표시됩니다. 가져 오기하면 오류가 수정됩니다.

그래도 문제는 아닙니다. 또 하나의 문제는 digits ls isNumber l이 4 개의 인수를 사용하여 digits을 호출하지만 digits을 하나의 인수 만 사용하도록 정의했다는 것입니다.

마찬가지로 digits a True은 동일한 문제 인 두 개의 인수로 digits을 호출합니다. digits1은 두 가지 인수를 취하기 때문에 아마도 여기에 digits1 a True을 써야 할 것입니다.

마지막으로 digitsdigits1은 임의의 목록을 인수로 사용하도록 정의되어 있지만 목록 요소에 isNumber을 호출하려는 것으로 보입니다. isNumberChar에서만 작동하며 임의의 값이 아닌 함수이므로 Char (즉 String)의 목록을 가져야합니다.