![变量的语法规则](https://linux22.com/image/391927/%E5%8F%98%E9%87%8F%E7%9A%84%E8%AF%AD%E6%B3%95%E8%A7%84%E5%88%99.png)
我有最新印刷版元字体书(第 8 次印刷,C 卷)。自那次印刷以来(因此自所有其他印刷以来),出现了两个非常奇怪的更正勘误表:
1)
有关此修正的问题:
A后缀是空集,或者是任意数量的<tag>
s 或<subscript>
任意组合的 s(请参阅第 54 页的语法规则)。因此,<subscript>
是后缀。因此不清楚为什么这么说
后缀或下标
就好像它们是独立的财产一样。
2)
值得在这里提出以下定义<suffix list>
:
<suffix list> -> <suffix> | <suffix list>,<suffix>
有关此修正的问题:
该案例有何具体例子?
答案1
“后缀”是什么意思?通常你会说“带后缀的变量”。但suffix
也可以empty
,所以这意味着每一个变量是后缀的。因此,该suffix
规则不是“后缀”的最佳参考。所以我们必须使用“后缀”的直观含义。现在像x.a
和这样的变量x[2]
看起来有时表现不同,例如x.a
和x.b
完全不同,但x[1]
和x[2]
联系更紧密。所以特别是在评论之后
但是 'x.k' 并不相同;它是标签 'x' 加上标签 'k' 作为后缀,而不是标签 'x' 加上变量 k 的值作为下标。
读者可能会认为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 接受了这一点。
因此更准确的规则可能是:内部量是后缀和练习 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>
。