Self-reference/description/recursion 을 굉장히 좋아한다. 그 이유는 역시 GEB 책에서 받은 영향 때문일 것이다.

Self Description 출처 : http://xkcd.com/688/

위의 이미지는 단순히 작은 화면 안에 자기 자신을 가지고 있는 것에 그치지 않는다. 잉크의 양까지 고려를 했기 때문에, 사실상 매우 복잡한 화면이다. 큰 화면의 잉크의 양을 기술 하기 위해서는 작은 화면의 잉크의 양을 알아야 하고, 작은 화면의 잉크의 양을 알기 위해서는 더 작은 잉크의 양을 알아야 하고...... 그리고 잉크의 비율은 모든 그림에 일치해야한다. 과연 이 그림이 수치적으로 정확히 일치할까? 라는 의문이 들긴 하지만, 뭐, 그걸 떠나서 의미만 봐도 참 재밌다.


내가 임의로 이름을 붙인 제목이지만, 프로그래밍에서도 'Self-Printer' 라는 것이 있다. '프로그램의 출력이 프로그램의 소스 코드와 동일한 프로그램'으로, 정의는 매우 간단하다.

입력 -> 컴파일, 실행 -> 출력 = 입력 -> 컴파일, 실행 -> 출력 = 입력 -> ...

이런 형식이다. 이걸 좀 응용해서 프로그램을 실행하면, 그 프로그램 안에서 컴파일, 실행을 한 후 정확히 같은 프로그램을 다시 출력하고 그 안에서 컴파일/실행 하는 프로그램을 만들 수 있지 않을까? 혹시 C 로는 안된다면 다른 언어로는 되지 않을까... 언제 한번 도전해봐야겠다.


예전에 썼던 글 마법 램프의 세가지 소원에도 비슷한 내용을 담고 있다. '소원 자체를 대상으로하는 소원'에 관한 글이고, 수학에서의 관점도 설명한다.


추천 태그


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/01/31 15:52 2010/01/31 15:52

트랙백 주소 :: http://www.hybrid.pe.kr/tt/trackback/502

댓글을 달아 주세요

  1. OpenID Logo듀르 2010/01/31 17:22  댓글주소  수정/삭제  댓글쓰기

    그런 코드 있었어요. 아스키아트 출력한걸 컴파일하면 다른 아스키아트가 출력되고 출력된것을 컴파일하면 다른 아스키아트가····

    • OpenID LogoHybrid 2010/01/31 18:47  댓글주소  수정/삭제

      헉... 바이너리도 가능할까 생각도 해봤지만, 안되겠지.. 하고 말았는데...
      아스키 아트가 됐다면 바이너리도 될지도 모르겠네요...
      암튼 아스키 아트로 했다니 대박이네요. -_-;;
      (좀 연구해보면 컴파일/실행까지 모조리 가능할 듯...)

[로그인][오픈아이디란?]