Ограничение на функцию Purify, мне кажется, можно сформулировать и так: если в 
правой части стереть все вызовы функций, то должна получиться подстрока строки 
токенов образца.

А как компилятор должен отличать — в функции Parse терм получен от линзы (а 
значит, должен быть восстановлен после выхода из линзы) или создан заново? Если 
я запишу (Ident 'm_' e.Name) — в этот терм позиция добавится на выходе?

Про гиперпараметры: если линзы добавляются в Рефал-7, то можно пользоваться 
каррированием — функция Purify получает гиперпараметры и возвращает 
функцию-линзу. <<Purify SkipComments> | Parse e.tokens>.

Про отношение «выразительность/сложность». Сложность определяется не только 
длиной БНФ, но и описанием семантики. Семантика линз довольно таки непростая. 

 

From: Sergei Skorobogatov s.yu.skorobogatov_AT_gmail.com <[email protected]> 
Sent: Thursday, November 14, 2024 9:19 PM
To: [email protected]
Subject: Re: Синтаксис словарей в Рефале!

 

On Thu, Nov 14, 2024 at 8:52 PM Александр Коновалов a.v.konovalov87_AT_mail.ru 
<http://a.v.konovalov87_AT_mail.ru>  <[email protected] <mailto:[email protected]> > 
wrote:

«При этом фрагменты образцов в результатных выражениях линзы не могут 
повторяться и должны сохранять своё взаимное расположение. Другими словами: 
линза всегда возвращает поддерево того упорядоченного дерева, которое 
передаётся ей в качестве аргумента. Это приводит к тому, что все термы на 
выходе линзы имеют ссылки на оригинальные термы, и эти ссылки назначаются 
тривиальным образом.»

С этого и надо было начинать, это было не очевидно. И, согласен, это жёсткое 
ограничение.

Я правильно понимаю, что относительный порядок сохраняться должен и в Purify, и 
в Parse? 

Purify -- линза. На неё наложено ограничение. У функции Parse никаких 
ограничений нет -- она может порождать новые термы, которые не входят в 
образцы, и располагать термы, полученные из линзы, произвольным образом, в том 
числе повторяя их любое количество раз.

 

On Thu, Nov 14, 2024 at 8:52 PM Александр Коновалов a.v.konovalov87_AT_mail.ru 
<http://a.v.konovalov87_AT_mail.ru>  <[email protected] <mailto:[email protected]> > 
wrote: 

«4.2. Хотелось бы передавать линзам гиперпараметры, управляющие их работой. Как 
их передавать, в принципе, понятно. Вот так, например: <Purify SkipComments | 
Parse e.tokens>. Но не совсем понятно, как отделить гиперпараметры от 
обрабатываемого дерева в реализации линзы — мешает накладываемое ограничение.»

Не понял: SkipComments передаётся в Purify или в Parse?

SkipComments передаётся в Purify, потому что расположено слева от вертикальной 
черты.

  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Стеллецкий Василий sw710_AT_yandex . ru
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Стеллецкий Василий sw710_AT_yandex . ru
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • Re:... Стеллецкий Василий sw710_AT_yandex . ru

Ответить