본문 바로가기

마음에 관한 이야기들

하스켈이 문득 궁금해지기 시작했다..ㅜ

파이썬을 배우기 시작한 이후 몇 달간은 문법을 익히는 게 걸림돌이 되지 않았다. 엄밀히 말하면, 어려워 보이는 개념은 "이해를 보류"했다. 그래도 내 단순업무를 자동화하거나, 간단한 웹프로그래밍을 배우는 데는 아무 문제가 없었다. 생활코딩 이고잉 선생님의 유튜브 영상을 보고 깨달은 건데, 일부러 스스로를 학습의 지옥으로 던져넣을 필요는 없었다. 만약 풀리지 않는 문제, 까다로운 문제가 발생하면 그 묵혀둔 답답함을 가지고 검색과 학습 끝에 해결책을 찾았을 때, 그 "지옥" 같던 학습이 "오아시스" 같은 즐거움으로 바뀐다는 경험을 얕게나마 프로그래밍을 배우면서 느끼게 되었다.

그런데...이놈의 왕성한 호기심은 어찌할 수가 없다. 사람이란 게 오랜 지루한 분야보다는, 완전히 새로운 분야가 훨씬 재미있어 보이게 마련인가보다. 책이나 강의 하나 이상을 구매해서 공부한 언어만 R, Javascript, C, C#, Java, Perl, Ruby, VBA에 GoLang과 커먼리습까지, 최소 10개의 언어는 입문해 본 셈이다. (그냥 설치해보고 끄적이다가 지운 언어도 10개는 넘는 것 같다..)

오늘 또 이놈의 호기심에 기름을 들이붓는 사건이 있었으니, 오랜만에 외장하드와 원드라이브를 정리하다 찾아낸, 

개미수열을 푸는 10가지 방법.pdf

"개미 수열을 푸는 10가지 방법"이라는 이북이었다. (다운로드 링크는 아래) 코드 대부분은 교재에 씌어 있던 구체적이고 친절한 설명과 깔끔한 Java 코드를 예제삼아 파이썬의 클래스와 제너레이터, 코루틴 같은 개념을 이해하려고 몇 번이고 읽었던 기억이 난다.

재미있게도 미완성 상태로 판매중이었다. 더 재미있는 건 가격을 내맘대로 매길 수 있었다는 사실이었다.
2만원 주고 사려다가 미완성인 걸 알고 1만원만 후원했던 기억이 난다.

오랜만에 발견해서 반가운 마음에 한 번 열어보았는데, 책 서두의 (예전엔 있었는지도 몰랐던) 하스켈 코드가 눈에 들어왔다. 임포트문을 제외하면 단 두 줄로 개미수열 10번째 라인을 출력해준다.

import Data.List
import Control.Monad

ant = iterate (group >=> sequence[length, head]) [1]  -- 개미수열을 리스트로 나타냄
main = print (ant !! 10)  -- 개미수열의 10번줄(!! 10)을 출력

뜬금없이 무슨 코드인가 싶을 수도 있는데, 위의 코드를 자바로 짜면 아래와 같다.

private static String ant(int n) {
  String s = "1";
  for (int line = 0; line < n; line++) {
    s = next(s);
  }
  return s;
}

private static String next(String s) {
  int length = 1;
  char head = s.charAt(0);
  String result = " ";
  for (int i = 1; i < s.length(); i++) {
    if (s.charAt(i) == head) {
      length++;
    } else {
      result += length;
      result += head;
      length = 1;
      head = s.charAt(i);
    }
  }
  result += length;
  result += head;
  return result;
}

한 페친 분께서 하스켈 관련한 포스팅을 몇 번 올리실 때에는 "그냥 뭔가 무섭다.." 라는 어색한 느낌이었는데, 이 두 줄의 코드를 읽자마자 마법에 홀린듯 일요일 아침에 하스켈을 검색하고 앉았다ㅜㅜㅜ 큰일이다. 안그래도 배우기로 계획한 것들, 업무들이 산더미인데... 그냥 위시리스트에만 넣어두자.

황금같은 가족의 주말을 하스켈로 날려버릴 뻔 했다가 진정하고 포스팅만 남겨둔다.


위에서 언급한 "개미 수열을 푸는 10가지 방법"은 아래의 린펍 링크에서 무료로 다운로드 가능하며, 자유롭게 후원도 할 수 있다.

 

개미 수열을 푸는 10가지 방법

1, 11, 21, 1211, ... 개미 수열(look-and-say sequence)을 코드로 옮겨본다. 여러분이 개미 수열의 1,000번째 줄, 혹은 10,000번째 줄을 출력할 수 있다면 이 책은 필요없을 것이다. 개미 수열을 놓고 C, Java, JavaS

leanpub.com

 

반응형