У меня есть последняя распечаткаMetafontBook(8-е издание, том C). После этого издания (и, следовательно, после всех других изданий) в книге появились два весьма любопытных исправления.опечатки:
1)
Вопрос относительно этого исправления:
Асуффиксявляется либо пустым множеством, либо любым числом <tag>
s или <subscript>
s в любой комбинации (см. правила синтаксиса на стр. 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», а не тег «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 верно, но а suffix 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>
».