Мда, господа! Я уже четверть века не занимался "новыми" версиями рефала, но тогда 25 лет назад, я их вроде читал и понимал...
[
[
Рассмотрим, например, таблицу sT. Условимся, что ее содержимое - это список термов-пар вида (tK eV), где tK - ключ, eV - значение.
Тогда можно было бы писать:
... <GETV sT> : eL (tK eV) eR , ... = <SETV sT eL (t.K1 e.V1) eL>
]
Т.е. GETV вызывается из левой части предложения с одним аргументом СИМВОЛОМ (ну ладно, возможно ссылка, хотя такого не припомню)
Ну пусть она увидела eL (tK eV) eR [а как она узнала, что это нужный ей tK?], НО ОТКУДА ВЗЯЛИСЬ (t.K1 e.V1) в правой части?
Ой, ребята, извините за ликбез, Но может кому тоже станет яснее...
... Видимо последняя eL это eR...
Ну пусть она увидела eL (tK eV) eR [а как она узнала, что это нужный ей tK?], НО ОТКУДА ВЗЯЛИСЬ (t.K1 e.V1) в правой части?
Ой, ребята, извините за ликбез, Но может кому тоже станет яснее...
... Видимо последняя eL это eR...
--
С уважением,
С уважением,
Василий
----------------
14.11.2024, 16:14, "Стеллецкий Василий sw710_AT_yandex.ru" <[email protected]>:
Кому: [email protected] ([email protected]);
Тема: Синтаксис словарей в Рефале!;
Александр Владимирович!
Т.е. выгода из-за длины идентификатора 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>;Случай тождественной линзы на практике будет распространённым, для него можно ввести сокращённую запись, например `перем @ [= образец]`.С уважением,Александр Коновалов
