본문 바로가기

replicateM

지정된 횟수만큼 처리를 반복하기 온라인 저지 사이트의 문제들은 주어진 task를 수행하는 코드를 작성하게 한 다음, 지정된 포맷의 입력을 처리하게 한다. 이 때 입력은 전통적으로 다음과 같은 형식을 취하는 경우가 많다. 최초 입력되는 값은 정수값으로 몇 번 반복할 것인지를 결정한다. 이후 매 행마다 데이터를 입력하고, 이것을 1에서 입력한 값 만큼 제공한다. 일반적인 프로그래밍 언어에서는 이 과정이 별다른 테크닉을 요구하지 않는다. 기본적인 입력 방법과 반복문을 사용해서 처리하게 된다. 예를 들어 파이썬이라면 다음과 같이 코딩할 수 있겠다. n = int(input()) for _ in range(n): x = input() solve(x) 그런데 하스켈에서는 이를 어떻게 처리할 수 있을까? 간단한 문제가 하나 있다고 하자. 정수 하나.. 더보기
헬로월드 X N 이번 문제는 hello world를 N번 찍는 문제이다. "간단한" 반복문 문제인데, 함수형 언어에서 반복문이라는게 있던가? 재귀적인 접근 함수형 언어에서는 반복문 대신에 함수의 재귀호출로 이를 대신한다. 따라서 다음과 같이 재귀호출을 이용한 함수를 생각해볼 수 있다. 이러한 패턴은 함수형 언어에서 반복문을 대체하는 가장 기본적인 패턴이다. sayHello :: Int -> IO () sayHello 0 = return () sayHello n = do putStrLn "Hello World" sayHello (n-1) 아래와 같이 확인해볼 수 있다. main :: IO () main = do n m a -> m [a]이다. Applicative 속성의 타입 a를 N번 반복해서 리스트로 만들어준다는 것인.. 더보기