t.K1 и e.V1 они из «многоточий» в левой части. Я тоже подумал, что вторая eL — опечатка и должно быть eR .
Отправлено из Mailspring (https://getmailspring.com/), лучшего бесплатного приложения электронной почты On нояб. 14 2024, at 5:07 вечера, Стеллецкий Василий sw710_AT_yandex.ru <[email protected]> wrote: > Мда, господа! Я уже четверть века не занимался "новыми" версиями рефала, но > тогда 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... > > > -- > С уважением, > > Василий > [email protected] > > > > ---------------- > 14.11.2024, 16:14, "Стеллецкий Василий sw710_AT_yandex.ru" <[email protected]>: > Кому: [email protected] ([email protected]); > Тема: Синтаксис словарей в Рефале!; > > > Александр Владимирович! > > Т.е. выгода из-за длины идентификатора Table, а если вместо него > > использовать T, - то выгоды никакой? > > > > > > -- > > С уважением, > > > > Василий > > [email protected] (mailto:[email protected]) > > > > > > > > ---------------- > > 14.11.2024, 15:52, "Александр Коновалов a.v.konovalov87_AT_mail.ru" > > <[email protected] (mailto:[email protected])>: > > Кому: [email protected] (mailto:[email protected]) ([email protected] > > (mailto:[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 (https://getmailspring.com/), лучшего > > > бесплатного приложения электронной почты > > > > > > > > > On нояб. 14 2024, at 3:34 дня, Стеллецкий Василий sw710_AT_yandex.ru > > > <[email protected] (mailto:[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] (mailto:[email protected]) > > > > > > > > > > > > > > > > ---------------- > > > > 14.11.2024, 15:14, "Александр Коновалов a.v.konovalov87_AT_mail.ru" > > > > <[email protected] (mailto:[email protected])>: > > > > Кому: [email protected] (mailto:[email protected]) ([email protected] > > > > (mailto:[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>; > > > > > Случай тождественной линзы на практике будет распространённым, для > > > > > него можно ввести сокращённую запись, например `перем @ [= образец]`. > > > > > > > > > > С уважением, > > > > > Александр Коновалов > > > > > > > > > > > > > > > > > > > > > > > >
