2016-11-03 2 views
0

나는 튜플 목록을 취하고 모든 튜플 다음에 새로운 라인을 만드는 문자열을 반환하는 show 함수를 만들려고합니다. 그래서 반환 [(a, b), (c는, d), (X, Y)] 걸릴하나의 문자열을 IO에서 여러 줄로 반환하는 방법은 무엇입니까?

XY

AB

CD 지금까지이 무엇인지

코드의 용어는

show' :: [(String,Int)] -> String 
show' [] = "" 
show' (x:xs) = (fst x) ++ " " ++ (show (snd x)) ++ " something that will create a newline in IO " ++ show' xs 
+0

당신은 하스켈에서' "\ n"'을 사용하여 개행 문자를 나타낼 수 있습니다. –

+0

나는 \ n을 문자열의 열린 위치에 두었지만 문자열에 "\ n"이 포함 된 문자열을 반환했습니다. – jazaniac

+0

'show '...'와'putStrLn $ show'... '를 비교하십시오. – chepner

답변

2

"\n"으로 표현할 수 있습니다.

문자 시퀀스가 ​​\n 인 콘솔에 여전히 문자열을 인쇄하는 경우 이는 아마도 print을 사용하고 있음을 의미합니다. 대신 putStr 또는 putStrLn을 사용하십시오. 내부적 문자 \n로 문자 줄 바꿈을 인코딩 show을 사용하기 때문에

당신은 print를 사용하지 않습니다. print은 실제 프로덕션 코드보다 디버깅에 더 유용합니다.

0

줄을 결합하고 각각에 줄 바꿈을 추가하는 함수 unlines이 있습니다. 그래서 당신은 그렇지 않으면 당신은 '\ n'을 대신 줄 바꿈의 볼 출력을 인쇄 할 수

show' :: [(String, Int)] -> String 
show' xs = unlines $ map (\(x,y) -> (show x) ++ " " ++ (show y)) xs 

사용 putStrLn 같은 것을 사용할 수 있습니다.

관련 문제