
나는 원시(매크로 없음) GNU에서 자체 복제 프로그램("quine")을 작성하려고 했습니다 nroff
. 물론 이것은 무의미하고 기이한 일이지만 이전에는 한 번도 수행된 적이 없는 것 같습니다. 나는 그렇게 하지 못했습니다.
nroff
매크로가 없는 입력 언어 퀸을 작성하는 데 성공한 사람은 문자열이나 매크로 또는 "상자"를 정의해야 한다고 확신합니다 . 그렇게 하려면 다음과 같은 요청을 작성해야 합니다.
.as s "just assigned this to string s
.de xxx
.nop "\*s"
..
.xxx
즉, nroff
입력의 모든 요청에는 '.'이 있습니다. 줄의 시작 부분에.
quines는 (치팅 없이) 소스 코드를 출력하기 때문에 출력에는 아마도 '.'가 있어야 합니다. 여러 출력 라인의 첫 번째 문자로 사용됩니다.
도대체 어떻게 GNU가 nroff
'.'를 출력하게 합니까? 줄 시작 부분에 문자가 있나요? 내가 알 수 있는 한, 아무리 간접적으로 접근하거나 탈출해도 그렇게 할 수 없습니다. '.'를 출력하는 숨겨진 요청이 있습니까? 줄의 시작 부분에?
저는 Groff 1.22.3이 설치된 최근 동기화된 Arch Linux를 사용하고 있습니다.
답변1
에서mdoc(7)
The special meaning of a punctuation character may be escaped with the string ‘\&’
그래서:
\&.
그러나 다음과 같은 후속 라인과 결합하면 까다로울 수 있습니다.
\&.
\&.as s "nron, nroff--very good, again!
함께 실행(그리고 빈 줄 전체를 생성)
$ nroff blah | head -2
. .as s "nron, nroff‐‐very good, again!
빈 줄을 추가하거나 다른 매크로를 사용하여 문제를 해결할 수 있지만
\&.
\&.as s "nron, nroff--very good, again!
그것이 quine의 요구에 어떤 영향을 미칠지는 모르겠지만 ...
답변2
.tr
시작에서 끝으로 번역할 문자 쌍을 사용하는 번역을 설정할 수 있습니다 . 예를 들어 #
다음과 같이 번역합니다 .
.
nroff <<\!
.tr #.
###abc...
!
생산하다
...abc...