Василий Игоревич!

«Если предлагаемое выражение длиннее уже имеющегося, зачем его вводить?»
Новый синтаксис короче, т.к. разбираемая переменная упоминается только один 
раз. А для частного случая AsIs можно использовать более короткую запись `@ [: 
…] `. Можно сравнить длину:
(e.Name) e.Table @ [: e.1 (e.Name t.Value) e.2] = …
(e.Name) e.Table, e.Table : e.1 (e.Name t.Value) e.2 = …
Новый вариант короче на 4 символа — длину слова «Table» минус 1. При другой 
расстановке пробелов, конечно, результат будет другим, но для более длинных 
имён выигрыш будет.

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

Отправлено из Mailspring (https://getmailspring.com/), лучшего бесплатного 
приложения электронной почты
On нояб. 14 2024, at 3:34 дня, Стеллецкий Василий sw710_AT_yandex.ru 
<[email protected]> wrote:
> Ой, братцы, что-то я запутался
> [
> В этой нотации можно определить тождественный геттер и благодаря нему иметь 
> возможность обращаться и к подвыражению целиком (чтобы целиком его 
> использовать в результате), и к его частям:
> (e.Name) e.Table @ [AsIs e.1 (e.Name t.Value) e.2]
> = <F e.Table> <G t.Value>;
> что будет эквивалентно
> (e.Name) e.Table
> , e.Table : e.1 (e.Name t.Value) e.2
> = <F e.Table> <G t.Value>;
> ]
> Если предлагаемое выражение длиннее уже имеющегося, зачем его вводить?
> Извините. за ликбез.
>
>
>
> --
> С уважением,
>
> Василий
> [email protected]
>
>
>
> ----------------
> 14.11.2024, 15:14, "Александр Коновалов a.v.konovalov87_AT_mail.ru" 
> <[email protected]>:
> Кому: [email protected] ([email protected]);
> Тема: Синтаксис словарей в Рефале!;
>
> > «Геттер и сеттер -- это фиговый синтаксический сахар, потому что вызываемая 
> > функция должна знать, что ей передали выражение, к которому нужно применять 
> > геттер. А хотелось бы, чтобы ей казалось, что ей передали выражение, к 
> > которому уже применили геттер :-)»
> >
> > Не представляю синтаксис для этой цели, кроме того, который я приводил выше:
> > перем @ [Геттер образец]
> > что эквивалентно приписыванию условия
> > , <Геттер перем> : образец
> > Если просто в образце написать
> > [Геттер образец]
> > то мы потеряем возможность обращаться к исходному («сырому») значению в 
> > правой части.
> >
> > Для симметрии для обновления значения в правой части можно использовать 
> > аналогичный синтаксис
> > перем @ [Сеттер результат]
> > но он ничем не лучше простого вызова функции
> > <Сеттер перем результат>
> >
> > Можно вместо
> > тип.индекс @ [Геттер образец]
> > писать
> > [Геттер образец].индекс /* тип описывается в определении геттера */
> > или
> > тип[Геттер образец]индекс
> > (скобки могут быть любыми) или
> > Геттер.индекс @ [образец]
> > (тоже скобки не обязательно квадратные).
> >
> > Можно пойти по пути Refal’а-D, который я тут пересказывать не буду, 
> > ограничусь ссылкой и скриншотом:
> >
> > http://refal.botik.ru/library/refal2015_issue-II.pdf (стр. 97)
> >
> > Но путь Рефала-Д мне не нравится.
> >
> > Другие варианты синтаксиса для этой цели мне не очевидны.
> >
> > Мы хотим увидеть в выражении другое выражение. Хотим увидеть = хотим 
> > сопоставить с образцом. Способ видения (геттер, линза) должен указываться 
> > явно, т.к. Рефал динамически типизированный. Подобразец нужно отграничить 
> > от остального образца. Поэтому у нас в записи должны появиться скобки, имя 
> > линзы и подобразец внутри скобок. Также полезно иметь возможность 
> > обратиться к исходному значению (но это опционально). Отсюда и получаются 
> > записи вида
> > 1) [Геттер образец]
> > 2) перем @ [Геттер образец]
> > Тут можно варьировать синтаксические детали: вид скобок (круглые, 
> > квадратные, фигурные, угловые…), разделитель (я указал традиционную для ФЯ 
> > собачку, но можно и любой другой знак или вообще ничего не указывать) и 
> > взаимный порядок расположения элементов.
> >
> > Ничего другого мне в голову не приходит.
> >
> > В этой нотации можно определить тождественный геттер и благодаря нему иметь 
> > возможность обращаться и к подвыражению целиком (чтобы целиком его 
> > использовать в результате), и к его частям:
> > (e.Name) e.Table @ [AsIs e.1 (e.Name t.Value) e.2]
> > = <F e.Table> <G t.Value>;
> > что будет эквивалентно
> > (e.Name) e.Table
> > , e.Table : e.1 (e.Name t.Value) e.2
> > = <F e.Table> <G t.Value>;
> > Случай тождественной линзы на практике будет распространённым, для него 
> > можно ввести сокращённую запись, например `перем @ [= образец]`.
> >
> > С уважением,
> > Александр Коновалов
>
>
>

    • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
      • ... Стеллецкий Василий sw710_AT_yandex . ru
  • Re:... Александр Коновалов 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
      • ... 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
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить