Александр Владимирович!
Т.е. выгода из-за длины идентификатора Table, а если вместо него использовать T, - то выгоды никакой?
Т.е. выгода из-за длины идентификатора Table, а если вместо него использовать T, - то выгоды никакой?
--
С уважением,
С уважением,
Василий
----------------
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]>:Кому: [email protected] ([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>;Случай тождественной линзы на практике будет распространённым, для него можно ввести сокращённую запись, например `перем @ [= образец]`.С уважением,Александр Коновалов
