Ответ Василию:
Вызов <GETV sT> не "в левой части", мне следовало перед ним (после ...)
поставить запятую, то есть это "левая часть условия".
Да, последнее eL - это опечатка, надо: eR.
Еще наверно следовало указать, что tK в образце - это повторная переменная
(определенная где-то левее внутри ...), и тогда это поиск по ключу.
Про sT я написал, что это "таблица", т.е. символ-ссылка на объект-таблицу.
В целом здесь синтаксически ничего нового, чего нет в Рефале-6.
С уважением,
Аркадий

чт, 14 нояб. 2024 г. в 17:06, Стеллецкий Василий sw710_AT_yandex.ru <
[email protected]>:

> Мда, господа! Я уже четверть века не занимался "новыми" версиями рефала,
> но тогда 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]
>
>
>
> ----------------
> 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 <https://getmailspring.com/>, лучшего
> бесплатного приложения электронной почты
> 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>;
>
> ]
> Если предлагаемое выражение длиннее уже имеющегося, зачем его вводить?
> Извините. за ликбез.
>
>
> --
> С уважением,
> Василий
> [email protected]
>
>
>
> ----------------
> 14.11.2024, 15:14, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> [email protected]>:
> Кому: [email protected] ([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>;
>
> Случай тождественной линзы на практике будет распространённым, для него
> можно ввести сокращённую запись, например `перем @ [= образец]`.
>
> С уважением,
> Александр Коновалов
>
>
>
>
>
>
>
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • Re:... Стеллецкий Василий sw710_AT_yandex . ru
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Arkady Klimov arkady . klimov_AT_gmail . com
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • Re:... Arkady Klimov arkady . klimov_AT_gmail . com
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить