“變數”的語法規則

“變數”的語法規則

我最後印的是元字體書(第 8 次印刷,C 卷)。自從那次印刷(以及所有其他印刷)以來,兩個非常奇怪的更正出現在勘誤表

1)

在此輸入影像描述

關於此更正的問題:

A後綴要麼是一個空集,要麼是任意數量的<tag>s 或<subscript>s 的任意組合(請參閱第 54 頁的語法規則)。所以,a<subscript>是一個子集後綴。因此不清楚為什麼這麼說

帶後綴或下標

就好像它們是單獨的屬性一樣。

2)

在此輸入影像描述

值得在這裡放置 的定義<suffix list>

<suffix list> -> <suffix> | <suffix list>,<suffix>

關於此更正的問題:

這個案例有什麼具體的例子嗎?

答案1

「後綴」是什麼意思?通常你會說「有後綴的變數」。但 asuffix也可以empty根據語法規則,所以這意味著每一個變數帶有後綴。因此該suffix規則並不是「後綴」的最佳參考。所以我們要用一個直覺的意思「後綴」。現在,像x.a和 之類的變數x[2]出現並且有時表現不同,例如x.ax.b完全不同,但是x[1]x[2]之間的聯繫更加緊密。所以尤其是在評論之後

但「x.k」不一樣;它是標籤“x”加上標籤“k”,而不是變數 k 的值加上下標的標籤“x”。

讀者可能會認為它x[k]沒有「後綴」。因此,雖然單獨使用“後綴”就足夠了,但在某些情況下可能會導致誤解,因此添加“或下標”會更容易。

後綴列表問題的一個例子是

newinternal x;
forsuffixes s = x1: show s; endfor
end;

這樣做失敗是因為x不能加後綴,因此x1無效。因此x, 是 an internal quantity,因此 avariable不是 a ,suffix因為否則x1也將是後綴並允許出現在 a 中suffix list

在我看來,這裡的問題在於,這似乎是一個問題,suffix list而不是suffix定義的問題:假設內部變數不是後綴,那麼

newinternal x;
y.x1 = 1;
end;

也不應該工作,但這已被 Metafont 接受。

所以更準確的規則可能是:內部數量a 字尾和練習 7.4 是正確的,但 asuffix list

<external suffix> -> <empty> | <subscript><suffix> | <external tag><suffix>
<suffix list> -> <external suffix> | <suffix list>,<external suffix>

答案2

這是對已接受答案的一個小補充 - 我的理解總結。


更正1):

短語“或下標”用於將下標變數添加到“後綴”的“直觀”含義中。

問題是,在 MetaFontBook 中,「後綴」一詞有兩種含義:「一般」(第 54 頁的語法規則)和「直覺」(下標之外的非空內容)。

更正2):

以下範例帶有x<tag>x<subscript>不起作用:

newinternal x;
forsuffixes s = x.k: show s; endfor
end
newinternal x;
forsuffixes s = x[1]: show s; endfor
end

以下範例帶有x<tag>x<subscript>工作:

newinternal x;
y.x.k = 1;
end
newinternal x;
y.x[1] = 1;
end

因此,第二次更正不僅必須按照接受的答案中所述進行更正,而且還要在“ x<subscript>”上添加“ x<tag>”。

相關內容