Александр Владимирович!
Т.е. выгода из-за длины идентификатора Table, а если вместо него использовать T, - то выгоды никакой?
 
-- 
С уважением,
Василий
[email protected]    
 
 
 
----------------
14.11.2024, 15:52, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <[email protected]>:
Кому: [email protected] ([email protected]);
Тема: Синтаксис словарей в Рефале!;
 
Василий Игоревич!
 
«Если предлагаемое выражение длиннее уже имеющегося, зачем его вводить?»
 
Новый синтаксис короче, т.к. разбираемая переменная упоминается только один раз. А для частного случая 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, лучшего бесплатного приложения электронной почты
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>;
]
Если предлагаемое выражение длиннее уже имеющегося, зачем его вводить?
Извините. за ликбез.
 
 
-- 
С уважением,
Василий
 
 
 
----------------
14.11.2024, 15:14, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <[email protected]>:
Тема: Синтаксис словарей в Рефале!;
 
«Геттер и сеттер -- это фиговый синтаксический сахар, потому что вызываемая функция должна знать, что ей передали выражение, к которому нужно применять геттер. А хотелось бы, чтобы ей казалось, что ей передали выражение, к которому уже применили геттер :-)»
 
Не представляю синтаксис для этой цели, кроме того, который я приводил выше:
перем @ [Геттер образец]
что эквивалентно приписыванию условия
, <Геттер перем> : образец
Если просто в образце написать
[Геттер образец]
то мы потеряем возможность обращаться к исходному («сырому») значению в правой части.
 
Для симметрии для обновления значения в правой части можно использовать аналогичный синтаксис
перем @ [Сеттер результат]
но он ничем не лучше простого вызова функции
<Сеттер перем результат>
 
Можно вместо
тип.индекс @ [Геттер образец]
писать
[Геттер образец].индекс /* тип описывается в определении геттера */
или
тип[Геттер образец]индекс
(скобки могут быть любыми) или
Геттер.индекс @ [образец]
(тоже скобки не обязательно квадратные).
 
Можно пойти по пути Refal’а-D, который я тут пересказывать не буду, ограничусь ссылкой и скриншотом:
 
 
Но путь Рефала-Д мне не нравится.
 
Другие варианты синтаксиса для этой цели мне не очевидны.
 
Мы хотим увидеть в выражении другое выражение. Хотим увидеть = хотим сопоставить с образцом. Способ видения (геттер, линза) должен указываться явно, т.к. Рефал динамически типизированный. Подобразец нужно отграничить от остального образца. Поэтому у нас в записи должны появиться скобки, имя линзы и подобразец внутри скобок. Также полезно иметь возможность обратиться к исходному значению (но это опционально). Отсюда и получаются записи вида
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>;
Случай тождественной линзы на практике будет распространённым, для него можно ввести сокращённую запись, например `перем @ [= образец]`.
 
С уважением,
Александр Коновалов
 
 
      • ... Стеллецкий Василий 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
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com

Ответить