On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов
a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

> *«А, у вас компилятор заново строит результатное выражение, да? Т.е. если
> в образце — скобки, и в результатном выражении — скобки, то скобки
> в результатном выражении будут созданы заново? Тогда тяжело. В принципе,
> если навострить компилятор брать скобочные термы из образца и вставлять их
> (или их копию) в результатное выражение, то всё получится автоматически.»*
>
> Смотря какой компилятор. <....>
>
> Если делать оптимизирующий компилятор с массивным представлением или
> представлением с подвешенными круглыми скобками, то семантику
> из предыдущего письма сделать будет проще.
>
Ага, а в векторно-списковым представлении сборка результатных выражений из
минимального количества фрагментов аргумента -- это вообще must have. При
этом проблема разлучения круглых скобок не может возникнуть.

On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов
a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

> *«4.3. Хотелось бы уметь переходить к оригинальным версиям термов
> в функциях, вызываемых из „линзированной“ функции. Как это сделать красиво,
> я не придумал.»*
>
> <...>
>
> Я бы предложил использовать встроенную функцию с именем «|»:
>
> <| терм> — разлинзирует однократно,
> <|| терм> — двухкратно,
> <||| терм> — трёхкратно и т.д.
>
> Разлинзировать можно неограниченное количество раз, т.к. если линзы
> кончились, терм перестаёт меняться.
>
Ох, бедный парсер :-)
Выглядит неплохо, но на самом деле это получается не встроенная функция, а
расширение синтаксиса.

On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов
a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

> Я правильно понял, что если линза трансформировала терм, то на выходе он
> восстановится, а если удалила, то уже нет?
>
Да, так и есть. Хотя это не всегда то, чего хочется. К сожалению, я не
придумал, как сделать по-другому без введения специального синтаксиса для
написания линз.

On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов
a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

> Кстати, уже в третий раз замечаю, что Вы предпочитаете добавлять
> к объектным выражениям неявные атрибуты, т.е. невидимые для сопоставления
> с образцом <...>
>
> Недостаток неявных атрибутов в том, что выражения, сопоставимые
> с одноимёнными переменными, могут вести себя по-разному. Это усложняет
> программирование на языке и затрудняет написание оптимизирующих
> компиляторов. Программист вынужден учитывать, что где-то могут быть
> подвешены атрибуты, и писать код так, чтобы компилятор их не потерял. Это
> напоминает копирование переменных, но если копирование влияет только
> на эффективность, то потеря атрибутов (в случае функций и, особенно,
> в случае линз) может менять поведение программы. Учёт атрибутов также
> усложнит глубокие оптимизации, да и вообще генерацию кода.
>
Да, есть такое дело. Я вообще люблю всё неявное и считаю, что оно того
стоит. Хотя критику неявностей в языках программирования я понимаю и
принимаю: неявности могут вызывать проблемы.

Что касается усложнения преобразования кода, то я предполагаю, что в данной
дискуссии мы обсуждаем добавление в Рефал возможностей, облегчающих жизнь
программистам НА Рефале, а не программистам НАД Рефалом. Понятно, что все
эти расширения языка -- функциональные термы, словари, линзы -- только
портят жизнь программистам НАД Рефалом. Также понятно, что вот я, например,
давно перестал писать НА Рефале, потому что понимаю, что на других языках
мне работать удобнее. И если выразительность Рефала существенно усилится, я
с удовольствием снова на Рефал вернусь :-)
  • 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:... Александр Коновалов 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

Ответить