On Thu, Nov 14, 2024 at 9:32 PM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote:
> Ограничение на функцию Purify, мне кажется, можно сформулировать и так: > если в правой части стереть все вызовы функций, то должна получиться > подстрока строки токенов образца. > Не совсем так, если только не понимать под подстрокой подмножество символов строки. Правильнее так: если в правой части стереть все вызовы функций, то должна получиться конкатенация подстрок образца, взятых по одному разу в том порядке, в каком они входят в образец. On Thu, Nov 14, 2024 at 9:32 PM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote: > А как компилятор должен отличать — в функции Parse терм получен от линзы > (а значит, должен быть восстановлен после выхода из линзы) или создан > заново? Если я запишу (Ident 'm_' e.Name) — в этот терм позиция добавится > на выходе? А это задача рантайма, а не компилятора. 1. При выполнении линзы к термам, которые она выдаёт наружу, добавляется информация о том, каким исходным термам они соответствуют. Достаточно при этом аннотировать только те термы, которые отличаются от исходных. 2. Дальше объектное выражение, порождённое линзой, поступает в "линзированную функцию", которая работает обычным образом. Надо только следить, чтобы код, порождённый компилятором для "линзированной" функции, не потерял аннотации термов. 3. После завершения "линзированной" функции происходит обход её результата с заменой всех аннотированных термов на их аннотации, т.е. на исходные термы, которым они соответствуют. On Thu, Nov 14, 2024 at 9:32 PM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote: > Про гиперпараметры: если линзы добавляются в Рефал-7, то можно > пользоваться каррированием — функция Purify получает гиперпараметры и > возвращает функцию-линзу. <<Purify SkipComments> | Parse e.tokens>. Да, это годится. Вот так одна суперфича -- функции высших порядков -- помогает использовать другую суперфичу :-) On Thu, Nov 14, 2024 at 9:32 PM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote: > Про отношение «выразительность/сложность». Сложность определяется не > только длиной БНФ, но и описанием семантики. Семантика линз довольно таки > непростая. Несомненно. Я бы даже сказал, что такой показатель как сложность языка программирования не определяется каким-то объективным критерием, а является экспертным мнением. Но длина БНФ, на мой взгляд, влияет на экспертное мнение в сторону роста этого показателя, потому что когда мы добавляем новые синтаксические конструкции, возникают вопросы об их сочетании с уже имеющимися синтаксическими конструкциями и друг с другом, и объём документации, необходимой для их реализации в компиляторе и для их использования, в общем случае растёт нелинейно.
