Eu tenho a última impressão deMetafontBook(8ª impressão, Volume C). Desde aquela impressão (e, portanto, desde todas as outras impressões), duas correções muito curiosas apareceram emerrata:
1)
Pergunta sobre esta correção:
Asufixoé um conjunto vazio ou qualquer número de <tag>
s ou <subscript>
s em qualquer combinação (veja regras de sintaxe na p.54). Então, a <subscript>
é um subconjunto desufixo. Portanto, não está claro por que se diz
sufixado ou subscrito
como se fossem propriedades separadas.
2)
Vale a pena colocar aqui a definição de <suffix list>
:
<suffix list> -> <suffix> | <suffix list>,<suffix>
Pergunta sobre esta correção:
Qual é algum exemplo específico concreto para este caso?
Responder1
O que significa "sufixo"? Normalmente você diria algo como "uma variável com sufixo". Mas a suffix
também pode estar empty
de acordo com as regras de sintaxe, então isso significaria quetodovariável é sufixada. Portanto a suffix
regra não é a melhor referência para “sufixo”. Portanto, temos que usar um significado intuitivo de “sufixo”. Agora as variáveis gostam x.a
e x[2]
aparecem e às vezes se comportam de forma diferente, por exemplo x.a
e x.b
são completamente diferentes, mas x[1]
e x[2]
estão muito mais conectadas. Então, especialmente depois do comentário
Mas 'xk' não é o mesmo; é a tag 'x' com o sufixo da tag 'k', não a tag 'x' subscrita pelo valor da variável k.
um leitor pode presumir que x[k]
não é "sufixo". Portanto, embora "sufixado" por si só deva ser suficiente, isso pode levar a mal-entendidos em alguns casos, por isso é mais fácil apenas adicionar "ou subscrito".
Um exemplo para o problema da lista de sufixos é
newinternal x;
forsuffixes s = x1: show s; endfor
end;
Isso falha porque x
não pode ter sufixo e, portanto, x1
é inválido. Portanto x
, que é an internal quantity
e, portanto, a variable
, não é a, suffix
porque caso contrário x1
também seria um sufixo e seria permitido em a suffix list
.
Na minha opinião, o problema aqui é que isso parece ser mais um problema do suffix list
que a suffix
definição: assumindo que variáveis internas não são sufixos, então
newinternal x;
y.x1 = 1;
end;
também não deveria funcionar, mas isso é aceito pelo Metafont.
Portanto, a regra mais precisa poderia ser: Uma quantidade internaéum sufixo e o Exercício 7.4 é verdadeiro, mas a suffix list
é
<external suffix> -> <empty> | <subscript><suffix> | <external tag><suffix>
<suffix list> -> <external suffix> | <suffix list>,<external suffix>
Responder2
Este é um pequeno acréscimo à resposta aceita - o resumo do meu entendimento.
Correção 1):
a frase "ou subscrito" existe para adicionar variáveis subscritas ao significado "intuitivo" de "sufixo".
A questão é que no MetaFontBook existem dois significados para a palavra "sufixo": "geral" (regra de sintaxe na p.54) e "intuitivo" (algo não vazio que não seja subscrito).
Correção 2):
os seguintes exemplos com x<tag>
e x<subscript>
não funcionam:
newinternal x;
forsuffixes s = x.k: show s; endfor
end
newinternal x;
forsuffixes s = x[1]: show s; endfor
end
os seguintes exemplos com x<tag>
e x<subscript>
funcionam:
newinternal x;
y.x.k = 1;
end
newinternal x;
y.x[1] = 1;
end
Portanto, a segunda correção deve ser corrigida não apenas conforme dito na resposta aceita, mas também adicionar " x<subscript>
" a " x<tag>
".