Антон! «Кое-что было реализовано потом в Рефале+ и описано даже: http://pat.keldysh.ru/~orlov/publications/2004.05-AbramovOrlov-Kompiljacija_sintaksicheskogo_otozhdestvlenija_jazyka_Refal.pdf »
Прочитал. Любопытно. Если я правильно понял, то для образца (e.Key) e.Items-B (e.Key t.Value) e.Items-E или, если записать его в виде набора перестроек: (e.Key) e.Items , e.Items : e.Items-B (e.Item) e.Items-E , e.Item : e.Key t.Value будет построен код, учитывающий, что переменная e.Items-B будет удлиняться от 0 до |e.Items|−1 (а не до |e.Items|), и что |e.Item| = |e.Key|+1. Для случая (e.Prefix) e.Strings-B (e.Prefix e.Suffix) e.Strings-E или (e.Prefix) e.Strings , e.Strings : e.Strings-B (e.String) e.Strings-E , e.String : e.Prefix e.Suffix будет учитываться ещё и |e.String| >= |e.Prefix|. А для (e.Substr) e.Begin e.Substr e.End эквивалентного (e.Substr) e.Text, e.Text : e.Begin e.Substr e.End переменная e.Begin будет удлиняться от 0 до |e.Text|−|e.Substr|. Т.е. экономия получается в том, что на циклах удлинения можно сэкономить от одного до нескольких итераций, а также сравнивать длины переменных до сравнения контента. Для некоторых проверок выше можно придумать маленькие алгоритмы ad hoc-оптимизации (например, для e.Item : e.Key t.Value или e.String : e.Prefix e.Suffix) — обнаруживать их и вставлять проверки, но лучше, наверное, более системный и общий алгоритм. Ещё алгоритм по ссылке может даже оптимизировать (проверяя сначала делимость длины аргумента на 3): IsTriplet { e.1 e.1 e.1 = True; e.X = False; } Но это, всё-таки, искусственный пример, призванный продемонстрировать возможности алгоритма. Примеры образцов выше всё-таки ближе к практике. С уважением, Александр From: Александр Коновалов [mailto:a.v.konovalo...@mail.ru] Sent: Monday, February 5, 2018 9:51 PM To: refal@botik.ru Subject: RE: Не понял про ограниченный РЕФАЛ Спасибо, Антон! Буду изучать. Александр Коновалов From: Anton Orlov [ <mailto:orlo...@gmail.com> mailto:orlo...@gmail.com] Sent: Monday, February 5, 2018 9:24 PM To: <mailto:refal@botik.ru> refal@botik.ru Subject: Re: Не понял про ограниченный РЕФАЛ 2018-02-05 21:00 GMT+03:00 < <mailto:sergei.romane...@supercompilers.ru> sergei.romane...@supercompilers.ru>: 2018-02-05 20:32 GMT+03:00 Александр Коновалов <a.v.konovalo...@mail.ru <mailto:a.v.konovalo...@mail.ru> >: Мне кажется, Вы о какой-то другой работе говорите. По ссылке рассматривается сопоставление типового выражения общего вида с L-выражением, которое, в отличие от турчинского, может содержать неодноимённые t-переменные и v-переменные. Ну и плюс рестрикции. А ведь и правда! Там смысл работы состоял в том, чтобы вычислить не только *пересечение* множеств, но и их *разность*. Но были и другие изыскания, по поводу сопоставлений вроде (eX) (eX) : (A e1) (e1 A), сводящихся к решению уравнений вроде A e1 = e1 A. Но они так в рукописях и остались. Наверное, решили, что "народу это не надо". Кое-что было реализовано потом в Рефале+ и описано даже: http://pat.keldysh.ru/~orlov/publications/2004.05-AbramovOrlov-Kompiljacija_sintaksicheskogo_otozhdestvlenija_jazyka_Refal.pdf Антон