HQ9+

덤프버전 : r20180326

1. 개요
2. 문법
3. 예제
4. 참고
5. 파생언어


1. 개요[편집]


2001년경에 만들어진 난해한 프로그래밍 언어. 제작자는 Cliff L. Biffle.

제작 동기는 브레인퍽 등의 장난으로 만들어진 변태적인 프로그래밍 언어로 고통받고 있는 인간들을 구원한다는 단순한 목적으로, 때문에 명령체계가 아주 간단하고 알아먹기도 아주 쉽다. 편의성을 위해 기능을 포함한 나머지를 모두 포기한 아주아주 대인배적인 마인드로 만들어졌기 때문이다.

HQ9+ 인터프리터의 소스 코드는 여기 서 볼 수 있다. OCaml로 작성됐다.


2. 문법[편집]


  • H : Hello, world!를 출력한다.
  • Q : 자기 자신의 소스 코드 파일을 전부 출력한다.(콰인) Q 1번당 1회씩 출력된다.
  • 9 : 벽장 속 99병의 맥주라는 노래의 전체 가사를 출력한다.
  • + : 가산기를 1 증가.


참 쉽죠?


3. 예제[편집]



  • HQ9+로 만든 Hello, world![1]
'''H'''


  • HQ9+로 만든 99병의 맥주[2]
'''9'''


  • HQ9+로 만든 콰인
'''Q'''



4. 참고[편집]



  • 벽장 속 99병의 맥주의 가사. 여기에 담긴 뜻은 해당항목 참조.

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.
99병의 맥주가 벽장에 있네, 99병의 맥주라네
하나를 내려서 넘겼네, 98병의 맥주가 벽장에 있네

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
98병의 맥주가 벽장에 있네, 98병의 맥주라네
하나를 내려서 넘겼네, 97병의 맥주가 벽장에 있네

……

2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 '''bottle''' of beer on the wall.
2병의 맥주가 벽장에 있네, 2병의 맥주라네
하나를 내려서 넘겼네, 1병의 맥주가 벽장에 있네

1 '''bottle''' of beer on the wall, 1 '''bottle''' of beer.
Take one down and pass it around, no more bottles of beer on the wall.
1병의 맥주가 벽장에 있네, 1병의 맥주라네
하나를 내려서 넘겼네, 더이상 벽장에 맥주가 없네

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
더이상 벽장에 맥주가 없네, 맥주는 더이상 없다네
가게로 가서 더 사왔네, 99병의 맥주가 벽장에 있네


  • 자기 자신의 코드를 출력하는 프로그램은 콰인이라고 해서 수학적으로 연구할 건덕지가 있는 꽤 복잡한 프로그램이다. 물론 이 언어로는 Q 한글자로 끝.

  • +는 가산기의 값을 1 증가시키는 코드이긴 한데 값을 출력할 수도, 다른곳에 대입할수도 없으므로 사실상 잉여 명령어다.

그니까 요약하자면, 초보 프로그래머가 가장 자주 짜는 프로그램만을 프로그래밍 할 수 있는 언어. 범용 프로그램으론 사용이 불가능하다.


5. 파생언어[편집]


이 언어에 ++ 명령어를 더한 HQ9++도 있다. 그것도 객체 지향적 언어다. ++를 쓰면 가산기의 값을 2 증가시키면서 객체에 새 인스턴스를 만들긴 하는데, 정보 은닉의 원리에 따라 이 객체에 접근하는 건 불가능하다.

HQ9++에 - 명령어를 더한 HQ9+-도 있는데, -의 효과는 다음과 같다.

  • - 앞에 아무 것도 없을 경우 : 구문 오류 발생
  • - 앞에 H가 있을 경우 : 입출력 오류 발생
  • - 앞에 Q가 있을 경우 : 무한 피드백 발생
  • - 앞에 9가 있을 경우 : 무한 루프 발생
  • - 앞에 +가 있을 경우 : 0으로 나누는 오류 발생
  • - 앞에 ++가 있을 경우 : 객체가 상위 클래스를 하위 클래스로 가지는 문제 발생

그러니까 오류를 일으키는 명령어. 무슨 지거리야

Q가 빠진 H9+도 있는데, H, 9, +를 제외한 모든 문자는 무시한다. 즉 Hello, world!를 입력할 경우 H를 제외한 모든 문자는 무시되어 Hello, world!가 출력되어, 이 프로그램이 Hello, world! 와 동시에 콰인이 된다.


[1] 모든 프로그래밍 언어중에 가장 간단한 Hello, world!의 위엄을 자랑한다.[2] 이것 역시 모든 프로그래밍 언어중에 가장 간단한 99병의 맥주의 위엄을 자랑한다.