`variable` の構文規則

`variable` の構文規則

私は最後の印刷物を持っていますメタフォントブック(第8刷、C巻)。この印刷以来(そして他のすべての印刷以来)、2つの非常に奇妙な訂正が行われた。訂正:

1)

ここに画像の説明を入力してください

この修正に関する質問:

サフィックスは空集合、または<tag>任意の数の または<subscript>の任意の組み合わせです(p.54の構文規則を参照)。したがって、a<subscript>サフィックス。したがって、なぜそう言われているのかは明らかではない。

接尾辞または下付き文字

まるで別々の財産であるかのように。

2)

ここに画像の説明を入力してください

ここでの定義を記載しておきます<suffix list>:

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

この修正に関する質問:

この場合の具体的な例は何ですか?

答え1

「接尾辞付き」とはどういう意味ですか? 通常は「接尾辞付きの変数」のように言います。しかし、構文規則に従ってa にsuffixなることもあるので、これは次のことを意味します。empty変数には接尾辞が付きます。したがって、このsuffixルールは「接尾辞付き」の最適な参照ではありません。したがって、「接尾辞付き」の直感的な意味を使用する必要があります。現在、 や などの変数は、x.a表示x[2]が異なり、動作も異なる場合があります。たとえばx.a、 と はx.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、 は であり、internal quantityしたがって はではvariableありません。suffixそうでなければx1も接尾辞となり、 で許可されるためです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 では「接尾辞」という単語に「一般的な」(p.54 の構文規則)と「直感的な」(下付き文字以外の空でない何か)という 2 つの意味があることです。

訂正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

したがって、2 番目の訂正は、承認された回答で述べられているとおりに訂正するだけでなく、「x<subscript>」に「」を追加して訂正する必要がありますx<tag>

関連情報