Добрый вечер, Андрей!
В Рефале-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 и его логику?
Андрей