Добрый вечер, Андрей!

В Рефале-5 запятая для откатов прозрачна. Не прозрачны для откатов только 
фигурные скобки — блоки после двоеточия и сами вызовы функций. Поэтому 
результатное выражение после запятой неуспеха породить не может (по 
определению), а образец после двоеточия — запросто.

Синтаксис «, выражение : образец» в Рефале-5 есть и он называется 
«where-конструкция». Синтаксис «, выражение : {…}» называется 
with-конструкцией. Они упоминались не только в учебнике, но и в главах 
обнинской школы метавычислений — там вместо запятой используются ключевые слова 
where и with соответственно.


С уважением,
Александр Коновалов



От: Andrei Klimov andrei_AT_klimov.net
Отправлено: 28 марта 2021 г. в 16:47
Кому: [email protected]
Тема: Re: Регулярные выражения слева

On Sat, Mar 27, 2021 at 11:47 PM Александр Коновалов a.v.konovalov87_AT_mail.ru 
<[email protected]> wrote:
[...]
 
Вариативность (но с ущербом для эффективности) можно реализовать и в Рефале-5. 
Код, эквивалентный коду Рефала-6, будет выглядеть так:
 
F {
  e.Name 〈что-то ещё〉, <F-Name e.Name> : T = … ;
  … = …;
}

F-Name {
'Маша' = T;
'Саша' = T;
e.Other = F;
}

А разве такое в Рефале-5 можно? С 90-х годов я рефал-плюсовый программист, мог 
и забыть. А сейчас лень заглядывать в руководство, да и, думаю, будет полезно 
обсудить здесь логики разных Рефалов, из которых вытекают различные решения по 
синтаксису. Помнится, подобные вопросы мы специально обсуждали в те годы, и у 
меня отложилось, что:

1. Запятая в Рефал-5 "непрозрачна для откатов", то есть "неотож" после запятой 
не вызывает возврат к следующему варианту в образце левее или следующему 
предложению. Помнится, "длинные" откаты вызывали отторжение у Турчина и у 
других апологетов Рефала-5.

2. Синтаксиса вида "выражение : образец" в Рефале-5 нет. Помнится, при 
обсуждении расширений Рефала Плюс по сравнению с Рефалом-5, Турчин говорил, что 
в Рефале-5 двоеточие означает вызов подставленного тела вспомогательной функции 
и только это. Поэтому, даже если в ней только одно предложение, всё равно надо 
ставить фигурные скобки, чтобы выглядело одинаково с определением функции. То 
есть данный код синтаксически правильно надо писать так (а семантика будет 
другая, чем хотелось):

F {
  e.Name 〈что-то ещё〉, <F-Name e.Name> : { T = … };
  … = …;
}  

И уж нечего и говорить, что фигурные скобки в Рефале-5 безоткатные.

Правильно я помню Рефал-5 и его логику?

Андрей

    • ... nikolai . kondratiev_AT_gmail . com
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • AW:... nikolai . kondratiev_AT_gmail . com
    • ... Andrei Klimov andrei_AT_klimov . net
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
        • ... Andrei Klimov andrei_AT_klimov . net
    • ... Arkady Klimov arkady . klimov_AT_gmail . com
      • ... Александр Гусев gusev_aleksandr_AT_mail . ru
        • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
          • ... Andrei Klimov andrei_AT_klimov . net
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... Andrei Klimov andrei_AT_klimov . net
              • ... nikolai . kondratiev_AT_gmail . com
              • ... Александр Гусев gusev_aleksandr_AT_mail . ru
              • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... nikolai . kondratiev_AT_gmail . com
              • ... nikolai . kondratiev_AT_gmail . com
              • ... Arkady Klimov arkady . klimov_AT_gmail . com
              • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... Александр Гусев gusev_aleksandr_AT_mail . ru
      • ... nikolai . kondratiev_AT_gmail . com

Ответить