본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
요즘 화제
임의의 문서로
sitesupport
사용자 모임
사랑방
사용자 모임
관리 요청
편집 안내
소개
도움말
정책과 지침
질문방
한울위키
검색
검색
보이기
로그인
개인 도구
로그인
콰인 (컴퓨팅) 문서 원본 보기
문서
토론
한국어
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
보이기
사이드바로 이동
숨기기
←
콰인 (컴퓨팅)
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
일반 사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{다른 뜻|윌러드 밴 오먼 콰인||미국의 철학자}} [[파일:Python 2 implementation of a quine.png|섬네일]] '''콰인'''({{lang|en|quine}})은 입력 없이 자기자신의 소스 코드를 출력하는 [[컴퓨터 프로그램|프로그램]]이다. 이는 [[메타프로그램]]의 일종이며, [[간접 자기 참조]]에 대해 광범위하게 연구한 [[윌러드 밴 오먼 콰인]]의 이름을 따서 명명되었다. [[클레이니의 재귀 정리]]에 따르면, [[계산 가능성 이론|계산가능]]한 문자열을 출력할 수 있는 프로그래밍 언어가 있다면 이 언어로부터 콰인을 만들 수 있다. 여기서 별도의 입력(사용자로부터의 입력이나, 파일 시스템 접근 등)을 필요로 하는 프로그램은 콰인으로 인정하지 않는다. 이를 인정할 경우 사용자에게 소스 코드를 입력하도록 요구하거나, 파일 시스템으로부터 코드를 읽어서 자기 자신을 출력할 수 있을 것이다. 몇몇 프로그래밍 언어에서는 아무것도 들어 있지 않은 소스 코드를 인정하기도 하지만 이 또한 자명하기 때문에 콰인으로 인정하지 않는다. 이러한 빈 프로그램은 [[IOCCC]]에서 한 번 ‘최악의 규칙 위반’이라는 이름으로 수상하기도 했으며, 그 뒤로는 빈 프로그램을 인정하지 않도록 규칙이 바뀌었다. == 배경 == 이러한 "스스로를 재생산하는 오토마타"의 존재에 관해서는, 본래 1940년대 즈음에 [[존 폰 노이만]]이 universal constructor와 같은 형태를 이론화한 바 있다. 콰인 프로그램의 아이디어는 폴 브래틀리(Paul Bratley)와 쟝 밀로(Jean Millo)의 ''Computer Recreations; Self-Reproducing Automata''에서 처음 등장했는데, 브래틀리는 1960년대에 [[아틀라스 오토코드]]로 쓰여진 다음 프로그램을 보고 자기 자신을 출력하는 프로그램에 관심을 가지게 되었다고 한다. <pre> %BEGIN !THIS IS A SELF-REPRODUCING PROGRAM %ROUTINESPEC R R PRINT SYMBOL(39) R PRINT SYMBOL(39) NEWLINE %CAPTION %END~ %CAPTION %ENDOFPROGRAM~ %ROUTINE R %PRINTTEXT ' %BEGIN !THIS IS A SELF-REPRODUCING PROGRAM %ROUTINESPEC R R PRINT SYMBOL(39) R PRINT SYMBOL(39) NEWLINE %CAPTION %END~ %CAPTION %ENDOFPROGRAM~ %ROUTINE R %PRINTTEXT ' %END %ENDOFPROGRAM </pre> == 예제 == 다음은 [[C (프로그래밍 언어)|C]]로 짠 전통적인 콰인의 예이다. 이 프로그램은 [[ASCII]] 문자 집합을 사용해야 정상적으로 작동한다. <syntaxhighlight lang="c"> #include <stdio.h> char S[] = "#include <stdio.h>%cchar S[] = %c%s%c;%cint main() { printf(S, 10, 34, S, 34, 10); return 0; }"; int main() { printf(S, 10, 34, S, 34, 10); return 0; } </syntaxhighlight> 여기서는 printf 함수의 포맷 문자열과 포맷 인자에 같은 문자열을 넣어서 S의 내용물을 출력하는 방법을 사용했다. 이 경우 C에서 [[탈출 문자]]로 사용하는 [[역슬래시]](\)가 들어 갈 때 간단히 출력하기 힘들기 때문에, 10, 34와 같이 ASCII 문자 번호를 그대로 써서 역슬래시를 피하고 있다. 다음은 [[자바 (프로그래밍 언어)|자바]]로 짠 콰인 프로그램의 한 예시이다. <syntaxhighlight lang="java">public class Quine { public static void main(String[] args) { char q = 34; String[] l = { "public class Quine", "{", " public static void main(String[] args)", " {", " char q = 34;", " String[] l = {", " ", " };", " for(int i = 0; i < 6; i++)", " System.out.println(l[i]);", " for(int i = 0; i < l.length; i++)", " System.out.println(l[6] + q + l[i] + q + ',');", " for(int i = 7; i < l.length; i++)", " System.out.println(l[i]);", " }", "}", }; for(int i = 0; i < 6; i++) System.out.println(l[i]); for(int i = 0; i < l.length; i++) System.out.println(l[6] + q + l[i] + q + ','); for(int i = 7; i < l.length; i++) System.out.println(l[i]); } }</syntaxhighlight> == 같이 보기 == * [[자체 수정 코드]] * [[자기 복제]] * [[티들리위키]] * [[투퍼의 자기언급 공식]] * [[더글러스 호프스태터]] * [[켄 톰프슨]] == 외부 링크 == * {{언어링크|en}} [http://www.nyx.net/~gthompso/quine.htm The Quine Page (Gary P. Thompson)] {{위키데이터 속성 추적}} [[분류:컴퓨터 프로그래밍]]
콰인 (컴퓨팅)
문서로 돌아갑니다.
검색
검색
콰인 (컴퓨팅) 문서 원본 보기
새 주제