
我嘗試用原始(無宏)GNU 編寫一個自我複製程式(“quine”)nroff
。誠然,這是毫無意義且古怪的,但以前似乎沒有這樣做過。我沒有這樣做。
我非常確定,無論誰成功編寫了無宏nroff
輸入語言 quine,都需要定義字串、巨集或「框」。為此,您需要編寫以下請求:
.as s "just assigned this to string s
.de xxx
.nop "\*s"
..
.xxx
也就是說,nroff
輸入中的每個請求都有一個“.”。在該行的開頭。
由於 quines 只是輸出它們的原始碼(沒有作弊),因此輸出可能必須有“.”。作為多個輸出行的第一個字元。
你到底如何讓 GNUnroff
輸出一個“.”字元位於行首?據我所知,沒有任何間接或轉義可以做到這一點。是否有一些輸出“.”的隱藏請求在一行的開頭?
我正在使用最近同步的 Arch Linux,其中安裝了 Groff 1.22.3。
答案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!
雖然我不知道這會如何影響奎因的需求...
答案2
您可以設定一個翻譯,使用.tr
一對字元來翻譯從到到。例如翻譯#
為.
:
nroff <<\!
.tr #.
###abc...
!
產生
...abc...