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