Александр, добрый вечер!

2018-08-08 16:05 GMT+03:00 Yandex Mail <[email protected]>:

> Андрей!
>

Спасибо за обращение ко мне, но вам писал Аркадий.😉

А в чём смысл такого ограничения на e-переменные? По-моему, оно большого
> упрощения не даёт, а только затрудняет программирование.
>

Это вопрос вкуса, но здесь я к вам присоединюсь: не вижу большого смысла
формально минимизировать и экономить народные байты и такты.


> В частности, сквозной проход по скобочному выражению («мультискобки») уже
> так красиво не напишется.
>

А вот тут не соглашусь. Есть несколько вариантов представлений
мультискобок. С точки зрения "красоты" они эквивалентны и в зависимости от
задачи можно брать, что удобнее. Вот как можно запрограммировать проход по
выражению при ограничениях Аркадия:

Travers {
  eA = <T () () (eA) ()>;
}

T {
  ()        (eC) ()          () = eC
  (eL)      (eC) (sA eB  ) (eR) = <T (eL)   (eC sA) (eB)      (eR)>;
  (eL)      (eC) ((eA) eE) (eR) = <T ((eL) eC))  () (eA) ((eE) eR)>;
  ((eL) eD) (eC) ()   ((eE) eR) = <T (eL) (eD (eC)) (eE)      (eR)>;
}

Здесь:

   - eL – левая мультискобка
   - eC, eD – просмотренные части текущего (Current) и предыдущего уровня
   - eE – хвост за правой скобкой (End)
   - eR – правая мультискобка

Андрей

Ответить