Добрый вечер, Сергей Юрьевич!

С функциями высших порядков согласен, они существенно повышают выразительность. 
Я к ним (Map, MapAccum, Reduce) настолько привык, что использую их и в 
программировании на чистом Рефале-5, правда приходится немного извращаться 
(добавлять новую entry-функцию):
https://mazdaywik.github.io/refal-5-framework/LibraryEx.html#функции-высшего-порядка
 
(https://mazdaywik.github.io/refal-5-framework/LibraryEx.html#%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%B2%D1%8B%D1%81%D1%88%D0%B5%D0%B3%D0%BE-%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0)
Возможно, когда-нибудь напишу препроцессор для Рефала-5, который преобразует 
вложенные функции во что-то подобное.
То, что Вы называете «линзы», другие называют парой из геттера и сеттера или 
акцессора и модификатора. Про возможный синтаксис для геттеров в образцах я 
написал в ответе Аркадию Валентиновичу в третьем письме дискуссии:
> Можно, используя условия:

> /*
> t.Expr ::=
> (t.Pos Ident e.Name)
> | (t.Pos Const e.Value)
> | (t.Pos t.Expr s.BinOp t.Expr)
> | …
> t.PureExpr ::=
> (Ident e.Name)
> | (Const e.Value)
> | (t.Expr s.BinOp t.Expr) -- намеренно нерекурсивно!
> | …
> */
> // <Pure t.Expr> == t.PureExpr -- нерекурсивная!
> Pure { ... }
> SomeParserFunc {
> … t.Expr …
> , <Pure t.Expr> : (Name e.VarName)
> …
> }
> Немного многословно (есть некоторое количество синтаксического шума), но 
> работать будет. Можно для этой идиомы придумать какой-нибудь синтаксический 
> сахар, в котором будет меньше синтаксического шума — по аналогии с 
> экстракторами в Scala (см. метод unapply). Скажем, как-то так:

> SomeParserFunc {
> … t.Expr @ <Pure (Name e.VarName)> …
> }
> Т.е. запись
> … VAR @ <EXTR PATTERN> …
> является сокращённой записью
> … VAR …, <EXTR VAR> : PATTERN
> неуспех в экстракторе EXTR приводит к неуспеху образца. Если не нравятся 
> угловые скобки в образце, можно использовать квадратные:
> … VAR @ [EXTR PATTERN] …

А сеттер — это просто вызов соответствующей функции <SetName t.Expr e.VarName>.
А работа с кодом программы во время выполнения — это уже особенность не Рефала 
как языка, а конкретной реализации.

С уважением,
Александр Коновалов

Отправлено из Mailspring (https://getmailspring.com/), лучшего бесплатного 
приложения электронной почты
On нояб. 13 2024, at 5:05 вечера, Sergei Skorobogatov 
s.yu.skorobogatov_AT_gmail.com <[email protected]> wrote:
> Добрый день, Саша!
>
> On Wed, Nov 13, 2024 at 3:41 PM Александр Коновалов 
> a.v.konovalov87_AT_mail.ru (http://a.v.konovalov87_AT_mail.ru) 
> <[email protected] (mailto:[email protected])> wrote:
> > Кстати, на Ваш теперешний взгляд, это какие изменения?
> >
> >
> >
>
> Если мы берём Рефал-5, то изменения такие:
> 1. превращение блоков в функции высших порядков (как в Рефал-7);
> 2. то, что я про себя уже много лет называю "линзы", т.е. некоторый механизм, 
> позволяющий функции видеть не то объектное выражение, которое ей передали в 
> качестве аргумента, а его преобразованный упрощённый вариант, и производить 
> манипуляции с этим упрощённым вариантом, отображаемые на исходное объектное 
> выражение (что-то наподобие views в реляционных базах данных, когда есть 
> настоящие таблицы, а есть производные таблицы, построенные на основе 
> настоящих, и при некоторых условиях запись в эти производные таблицы приводит 
> к обновлению настоящих таблиц);
> 3. представление Рефал-кода в виде объектных выражений, т.е. возможность 
> ана��иза, преобразования и выполнения Рефал-кода, представленного в виде 
> объектных выражений.
>
> Вот как-то так :-)
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
    • ... Стеллецкий Василий sw710_AT_yandex . ru
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
    • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
        • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
          • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
            • ... Стеллецкий Василий sw710_AT_yandex . ru
              • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
                • ... Стеллецкий Василий sw710_AT_yandex . ru
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
                • ... Стеллецкий Василий sw710_AT_yandex . ru
              • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
                • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
                • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
                • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
                • ... Стеллецкий Василий sw710_AT_yandex . ru
                • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
                • ... Стеллецкий Василий sw710_AT_yandex . ru
                • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить