On Sat, Mar 27, 2021 at 11:47 PM Александр Коновалов a.v.konovalov87_AT_mail.ru <refal@botik.ru> 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 и его логику? Андрей >