Ich habe die letzte Ausgabe vonMetafontBook(8. Auflage, Band C). Seit dieser Auflage (und damit seit allen anderen Auflagen) erschienen zwei sehr merkwürdige Korrekturen inKorrekturen:
1)
Frage zu dieser Korrektur:
ASuffixist entweder eine leere Menge oder eine beliebige Anzahl von <tag>
s oder <subscript>
s in beliebiger Kombination (siehe Syntaxregeln auf S. 54). Also <subscript>
ist a eine Teilmenge vonSuffixDaher ist es nicht klar, warum gesagt wird
mit Suffix oder Index
als ob es sich um getrennte Eigenschaften handeln würde.
2)
<suffix list>
Es lohnt sich, hier eine Definition von : anzugeben .
<suffix list> -> <suffix> | <suffix list>,<suffix>
Frage zu dieser Korrektur:
Können Sie für diesen Fall ein konkretes Beispiel nennen?
Antwort1
Was bedeutet "mit Suffix versehen"? Normalerweise würde man so etwas sagen wie "eine Variable mit einem Suffix". Aber gemäß den Syntaxregeln suffix
kann auch ein Suffix verwendet werden , also würde dies bedeuten, dassempty
jedenVariable ist mit einem Suffix versehen. Daher suffix
ist die Regel nicht die beste Referenz für „mit Suffix versehen“. Wir müssen also eine intuitive Bedeutung von „mit Suffix versehen“ verwenden. Nun erscheinen Variablen wie x.a
und x[2]
und verhalten sich manchmal anders, zum Beispiel sind x.a
und x.b
völlig anders, aber x[1]
und x[2]
sind viel stärker verbunden. Also insbesondere nach dem Kommentar
Aber „x.k“ ist nicht dasselbe. Es handelt sich um das Tag „x“, dem das Tag „k“ angehängt ist, und nicht um das Tag „x“, dem der Wert der Variablen k als Index vorangestellt ist.
ein Leser könnte annehmen, dass dies x[k]
nicht „suffixiert“ ist. „suffixiert“ allein sollte also ausreichen, aber das könnte in manchen Fällen zu Missverständnissen führen, daher ist es einfacher, einfach „oder tiefgestellt“ hinzuzufügen.
Ein Beispiel für das Suffixlistenproblem ist
newinternal x;
forsuffixes s = x1: show s; endfor
end;
Dies schlägt fehl, da x
kein Suffix hinzugefügt werden kann und daher x1
ungültig ist. Daher x
ist , das ein internal quantity
und daher ein variable
ist, kein ein, suffix
da es sonst x1
auch ein Suffix wäre und in einem zulässig wäre suffix list
.
Meiner Meinung nach besteht das Problem hier darin, dass es sich eher um ein Problem mit suffix list
als mit der suffix
Definition handelt: Angenommen, interne Variablen sind keine Suffixe, dann
newinternal x;
y.x1 = 1;
end;
sollte auch nicht funktionieren, wird aber von Metafont akzeptiert.
Die genauere Regel könnte also lauten: Eine interne GrößeIsta Suffix und Übung 7.4 ist wahr, aber a suffix list
ist
<external suffix> -> <empty> | <subscript><suffix> | <external tag><suffix>
<suffix list> -> <external suffix> | <suffix list>,<external suffix>
Antwort2
Dies ist eine kleine Ergänzung zur akzeptierten Antwort – die Zusammenfassung meines Verständnisses.
Korrektur 1):
Der Ausdruck „oder tiefgestellt“ dient dazu, der „intuitiven“ Bedeutung von „Suffix“ tiefgestellte Variablen hinzuzufügen.
Die Sache ist, dass es in MetaFontBook zwei Bedeutungen des Wortes „Suffix“ gibt: „allgemein“ (Syntaxregel auf S. 54) und „intuitiv“ (etwas nicht Leeres außer Index).
Korrektur 2):
die folgenden Beispiele mit x<tag>
und x<subscript>
funktionieren nicht:
newinternal x;
forsuffixes s = x.k: show s; endfor
end
newinternal x;
forsuffixes s = x[1]: show s; endfor
end
Die folgenden Beispiele funktionieren mit x<tag>
und :x<subscript>
newinternal x;
y.x.k = 1;
end
newinternal x;
y.x[1] = 1;
end
Daher muss die zweite Korrektur nicht nur wie in der akzeptierten Antwort angegeben korrigiert werden, sondern es müssen auch „ x<subscript>
“ zu „ x<tag>
“ hinzugefügt werden.