Здравствуйте, Сергей Юрьевич!

> "(ну а что касается отдельной конструкции `del M[key]` для удаления словарной пары, то это за гранью добра и зла)"
 
Ну почему же? Я этим часто пользуюсь на рефале. Если я знаю, что значения из списка (словарика) мне не понадобятся более одного раза, то после использования я их более в списке не оставляю
... wb(ea(wbec)ed)... =... (eaed) ... (ec) ...  *  ;)
 
-- 
С уважением,
Василий
[email protected]    
 
 
 
----------------
11.11.2024, 13:24, "Sergei Skorobogatov s.yu.skorobogatov_AT_gmail.com" <[email protected]>:
Кому: [email protected] ([email protected]);
Тема: Синтаксис словарей в Рефале!;
 
Здравствуйте, Александр!
 
On Mon, Nov 11, 2024 at 10:15 AM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

Ряд промышленных языков (Perl, Python, Go) поддерживают ассоциативные массивы на уровне синтаксиса, в ряде языков (_javascript_, PHP, Lua) встроенные массивы уже ассоциативные (целочисленные ключи — частный случай применения), стандартные библиотеки многих ЯВУ предоставляют типы ассоциативных массивов. Так что задача не такая уж и частная.

Но то, что усложнение семантики существенное — согласен.

Я не знаю Perl, поэтому скажу про Python и Go: это настолько развесистые языки по сравнению с рефалом, что поддержка ассоциативных массивов на уровне синтаксиса, будучи, на мой взгляд, дурацкой идеей, их не сильно портит. В Go надо было изначально делать обобщённые типы, и тогда отдельный синтаксис для хеш-таблиц им бы не понадобился. В Python надо было бы не городить "list comprehension", "dictionary comprehension" и "set comprehension", а ограничиться одной конструкцией "generator comprehension" (ну а что касается отдельной конструкции `del M[key]` для удаления словарной пары, то это за гранью добра и зла).
 
On Mon, Nov 11, 2024 at 10:15 AM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

Можно в скобочные термы добавлять пометку $D (или $I от слова «index», или $M от «map» и т.д.), говорящую о том, что это индексированный терм, при сопоставлении с образцом индекс надо учитывать, при построении результата — создавать. Ну и в руководстве описать формальные правила, которым содержимое терма должно удовлетворять. Нарушение этих правил — не ошибка, просто индекс работать не будет (т.е. роль у $D примерно такая, как у ключевых слов register и inline в C++ — компилятор их учитывать не обязан). Компилятор в подобных случаях может выдавать предупреждения.

А вот это классная идея (если я её правильно понял)! Т.е. для эффективного поиска алгоритм сопоставления с образцом использует индекс, прикреплённый к выражению, если этот индекс существует. Но порождение индекса делается не автоматически, а по желанию пользователя, который может пометить выражение, для которого нужно построить индекс, с помощью ключевого слова. Это минимально расширяет синтаксис, вообще не меняет семантику, и не ухудшает производительность тех программ, которым не нужен поиск в ассоциативных списках. Единственный недостаток такого консервативного подхода состоит в том, что мы не можем надеяться на внезапное ускорение старых программ, но это не такая уж и беда, учитывая их количество :-)
 
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
    • ... Стеллецкий Василий sw710_AT_yandex . ru
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
    • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
        • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
          • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
            • ... Стеллецкий Василий sw710_AT_yandex . ru
              • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
                • ... Стеллецкий Василий sw710_AT_yandex . ru
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить