Александр, добрый вечер!
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 – правая мультискобка
Андрей