저는 매크로가 없는 원시 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!
이것이 Quinn의 필요에 어떤 영향을 미치는지는 모르겠지만...
답변2
.tr
한 쌍의 문자를 사용하여 에서 으로 번역하는 번역을 설정할 수 있습니다 . 예를 들어 다음 #
과 같이 번역됩니다 .
.
nroff <<\!
.tr #.
###abc...
!
생산하다
...abc...