Self-reference/description/recursion 을 굉장히 좋아한다. 그 이유는 역시 GEB 책에서 받은 영향 때문일 것이다.
출처 : http://xkcd.com/688/위의 이미지는 단순히 작은 화면 안에 자기 자신을 가지고 있는 것에 그치지 않는다. 잉크의 양까지 고려를 했기 때문에, 사실상 매우 복잡한 화면이다. 큰 화면의 잉크의 양을 기술 하기 위해서는 작은 화면의 잉크의 양을 알아야 하고, 작은 화면의 잉크의 양을 알기 위해서는 더 작은 잉크의 양을 알아야 하고...... 그리고 잉크의 비율은 모든 그림에 일치해야한다. 과연 이 그림이 수치적으로 정확히 일치할까? 라는 의문이 들긴 하지만, 뭐, 그걸 떠나서 의미만 봐도 참 재밌다.
내가 임의로 이름을 붙인 제목이지만, 프로그래밍에서도 'Self-Printer' 라는 것이 있다. '프로그램의 출력이 프로그램의 소스 코드와 동일한 프로그램'으로, 정의는 매우 간단하다.
입력 -> 컴파일, 실행 -> 출력 = 입력 -> 컴파일, 실행 -> 출력 = 입력 -> ...
이런 형식이다. 이걸 좀 응용해서 프로그램을 실행하면, 그 프로그램 안에서 컴파일, 실행을 한 후 정확히 같은 프로그램을 다시 출력하고 그 안에서 컴파일/실행 하는 프로그램을 만들 수 있지 않을까? 혹시 C 로는 안된다면 다른 언어로는 되지 않을까... 언제 한번 도전해봐야겠다.
예전에 썼던 글 마법 램프의 세가지 소원에도 비슷한 내용을 담고 있다. '소원 자체를 대상으로하는 소원'에 관한 글이고, 수학에서의 관점도 설명한다.







461192
411
579







댓글을 달아 주세요
그런 코드 있었어요. 아스키아트 출력한걸 컴파일하면 다른 아스키아트가 출력되고 출력된것을 컴파일하면 다른 아스키아트가····
헉... 바이너리도 가능할까 생각도 해봤지만, 안되겠지.. 하고 말았는데...
아스키 아트가 됐다면 바이너리도 될지도 모르겠네요...
암튼 아스키 아트로 했다니 대박이네요. -_-;;
(좀 연구해보면 컴파일/실행까지 모조리 가능할 듯...)