본문 바로가기

Haskell

입력된 두 정수의 합을 출력

출처 : https://www.hackerrank.com/challenges/fp-solve-me-first/problem

두 정수를 입력받아서 그 합을 출력하세요.

A, B는 1~1000 사이의 정수

입력: 2 3

출력: 5

입력받기

getLine을 사용하면 키보드로부터 한 줄의 텍스트를 입력받을 수 있다. 이렇게 입력받은 텍스트는 IO 모나드로 싸여진 IO [Char] 타입이 된다. 이를 read 함수로 읽어서 IO Int로 만든다음, do 블럭 내에서 바인딩하여 더한 후 출력한다.


main = do
  val1 <- fmap read getLine :: IO Int
  val2 <- read <$> getLine :: IO Int -- <$>는 fmap의 축약이다.
  let sum = val1 + val2
  print sum

IO String -> IO Int로 만들 기 위해서 read :: String -> A 함수를 쓰는데 모나드에 싸여있는 내부에 사상해야 해서 fmap 함수를 이용했다. fmap은 연산자로는 <$>로 대체하여 쓸 수 있다.

readLn 함수

한 줄을 읽어들여서 라인의 값을 read 하는 것으로 readLn 함수가 존재한다.


고급작성법

하스켈에 익숙한 프로그래머라면 이 문제는 다음과 같이 작성할 것이다. 지금은 뭔가 이해하기 어려울 수 있지만, 어떤 의미의 식인지 곧 알게 될 것이다.

main = (+) <$> readLn <*> readLn >>= print