2012-05-19 6 views
0

안녕하세요, 나는 "문자열"에 단어를 합친 입력 "="구문 분석 오류가 발생했습니다, 어떤 도움을 주셔서 감사합니다. 감사.입력에 구문 분석 오류 "="

module Main where 

main = do 
putStr "Enter a string: " 
input <- getContents 

value = unwords . sum . words input 
putStrLn (value) 
+1

"let"을 값 앞에 쓰면 구문 오류가 사라지고 형식 오류가 발생할 수 있습니다. 어떤 오래된 문자열에있는 단어를 합치는 것이 무엇을 의미하는지, 왜 그런 결과를 현명하게 'unwords'할 수 있었는지는 분명하지 않습니다. 당신이 원하는 것을 보여 줄 수 있습니까? – pigworker

+0

아 단어를 사용할 때 대부분의 시간을 비공개로 사용한 후에 혼란 스러웠습니다. 내가 예상 할 수있는 것은 입력이 "this is a string"이고 단어가 [ "this", "is", "a", "string"]로 갈라지면 sum은 이들을 센다. , 그러면 인쇄 될 것입니다. 이것에 맞는 함수가 합쳐 졌습니까? 건배. – user1405440

+1

아니요, 'sum'은 숫자 목록의 합계를 계산합니다. 단어를 집계하려면,'length'를 사용하여리스트의 길이를 얻고,'show'를 사용하여 길이에서 문자열을 만드십시오. 또는 숫자를 표시하기 위해'putStrLn' 대신'print'를 사용할 수도 있습니다. – pigworker

답변

4

라인 :

value = unwords . sum . words input 

구문이 유효하지 않습니다. let 문이 필요합니다.

let value = (unwords . sum . words) input 

혹은 :

let value = unwords . sum . words $ input 

let value = unwords . sum . words input 

이 여전히 당신은 당신의 기능을 (물론, 세 가지 기능의 구성) 입력에 적용 유효하지 않습니다 싶어한다 입력이 String이고 words의 결과가 String ([String])의 목록이기 때문에 여전히 유효하지 않습니다. 따라서 문자열을 Num 유형 (Integer? s)으로 읽은 다음 String으로 다시 변환하려고합니다.

let value = show . sum . map read. words $ input 

유형에 따라 읽기에 주석 할 수 있습니다 만 (unwords가 필요 단어의 목록, 대) 끝에서 왼쪽으로 한 단어, 합계를 가지고 있기 때문에 unwords는 유용하지 않다 또는 Int 또는 Double 또는 기타 항목을 지정하는 합계입니다.

+0

고마워요! 나는 어떻게 읽기가 작동하는지 그리고 왜 문자열 목록에 읽기를 매핑해야하는지에 대해 잘 모르겠습니다. 조금 더 설명 할 수 있겠습니까? – user1405440

+1

문자열을 추가 할 수 없으므로 문자열 목록을 합칠 수 없습니다. –

+0

당신은 pigworker에게 당신이'길이'를 찾고 있다고 제안합니다. 나는 당신이 숫자의 합계를 원한다고 생각했다 - 합계는 숫자의 목록을 합계 할 것이다. 'read'는 문자열을 취해 그것을 숫자로 바꾸어줍니다 ('map read'는 문자열 목록에 대해서 숫자 목록으로 똑같이 할 것입니다). –