2013-02-22 2 views
0

오류가 계속 발생합니다 : 예상 유형 'Bool'과 실제 유형 '[t0]'을 (를) 비교할 수 없습니다. 문자열의 사용자 입력을 얻으려고하지만 역순으로 많은 문자열을 출력하려고합니다.하스켈 IO 역 문자열 입력

예 입력 :

HI1 
HI2 

예 출력 :

HI2 
HI1 

내 코드 : 다음 비투스의 의견, import Control.Monad을 확장하려면

Back :: Int -> IO() 
    Back x = do line <- sequence_[getLine|[1..x]] 
        mapM_ print (reverse line) 
+0

입력 및 출력을 각 라인마다 하나씩 또는 모든 입력을 한 라인에, 모든 출력을 한 라인에 모두 표시 하시겠습니까? – Boris

+1

[replicateM] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Monad.html#v:replicateM)을 참조하십시오. – Vitus

답변

3
back :: Int -> IO() 
back x = do line <- sequence [getLine | _ <- [1 .. x]] 
      mapM_ putStrLn (reverse line) 
+0

작동하지 않습니다 –

+8

@user ** 컴퓨터에 원격으로 연결되어있어 오류 메시지가 표시 될 수 있지만 아무에게도 알려주지 않습니다 ** – Ingo

+2

@user Ingo는 여러분에게 " does not work "는 우리에게 당신에게 더 나은 대답을주기 위해 전혀 도움이되지 않습니다. 좋은 답변을 원하면 그 이상의 정보를 제공하여 도와 드리겠습니다. 이 솔루션은 어떻게 잘못 되었습니까? 그것은 나에게 잘 작동하지만 어쩌면 프로그램이 당신보다 더해야 할 일에 대해 다른 해석을 할 수 있습니다.이 경우 더 정확하게 프로그램을 지정해야합니다. 또는 프로그램이 원하는 것과 다른 입출력 사례를 제공 할 수도 있습니다. – Boris

8

,

back count = do 
    lines <- replicateM count getLine 
    mapM_ putStrLn (reverse lines) 

이 방법이 효과가 없다면 어떤 오류 메시지가 표시되는지 또는 잘못된 결과물을 보여주십시오. 이 경우

, 우리는 비교적 쉽게 표기법을 포기 할 수

back count = mapM_ putStrLn . reverse =<< replicateM count getLine 

또는

back count = mapM_ putStrLn =<< liftM reverse (replicateM count getLine) 

당신은 또는 명확하게하기 위해 그 중 하나를 찾을 수 없습니다 수 있습니다.


함수 이름은 소문자로 시작해야합니다. back. 함수 이름으로 Back은 구문 오류입니다.

들여 쓰기가 중요합니다. 귀하의 질문에 do 블록의 들여 쓰기가 잘못되었습니다; 나와 멜포 민 응답의 do 블록은 정확하게 들여 쓰기되어 있습니다.