Позволю себе встрять в разговор.
Александр, все-таки тот процесс, в результате которого у Вас в программе As
появился $iter, как я понимаю, это уже не просто прогонка, а что-то сродни
суперкомпиляции. Прогонка, по определению, - только разворачивает
перестройки, преобразуя их в дерево сужений, а у Вас прогонка создает
бесконечный процесс разворачивания, который Вы затем сворачивате в
циклический код посредством $iter. Поэтому утверждение "$iter используется
для представления результатов прогонки" неточно: он здесь возник как
результат чего-то более продвинутого, чем прогонка. Просто из прогонки
$iter, по-моему, возникнуть не может.
Кроме того, здесь нам была представлена "прогонка" с образцами общего вида,
а не из "ограниченного рефала". Такие образцы неявно содержат в себе циклы.
И наверно, да, эти циклы можно преобразовать в явные с использованием
$iter. Но это тогда будет просто особое преобразование, которое раскрывает
семантику сложных образцов, а не прогонка.
А Александр, кажется, сделал здесь попытку представить такое преобразование
тоже как прогонку, расширив ее элементами суперкомпиляции (зацикливанием).
Мне кажется, этого раньше никто не пытался делать. (Или я просто отстал?) И
возникает вопрос, можно ли из этой попытки сделать полный алгоритм, который
будет любые образцы переваривать. Конечно, это можно сделать через перевод
в ограниченный рефал с последующей полноценной суперкомпиляцией, но может
можно и как-то более "непосредственно"?. Александр, это наверно неплохая
тема для курсовых-дипломных.

13 февраля 2018 г., 2:07 пользователь Александр Коновалов <
a.v.konovalo...@mail.ru> написал:

> Сергей!
>
> *«Сам Рефал Плюс - тот же самый. Но, правда, кое-какие косметические
> "подкрутки" во входном языке сделали.»*
>
> Т.е. в принципе, пролистать начало всё же стоит. А на счёт <"+" …> → <Add
> …>, запись через "+" не даёт экономии даже в символах. Это в Рефале-5
> получается короче — <+…>.
>
> *«А когда "люди" исчезли, то стало хорошо!»*
>
> Понимаю. Сам разрабатываю Рефалы, используемые только в раскрутке
> и самоприменении своих компиляторов. Василий Стеллецкий, я думаю, тоже
> с нами согласится. :-)
>
> А если не жалко своих собственных старых программ, то можно невозбранно
> ломать и обратную совместимость.
>
> *«Поэтому многие вещи и Рефале Плюс и выглядят как "искусство для
> искусства". Ставятся некоторые формалистические задачи - и успешно
> решаются. А что язык получился при этом слишком сложный, с точки зрения
> "простого народа", так ведь тут по принципу: "нет народа - нет проблем".»*
>
> Ну, есть нюанс. Может получиться в итоге и так: «нет народа — и не будет».
> Поэтому я сделал из «Простого Рефала» Рефал-5λ полностью обратно
> совместимый с Рефалом-5. Хотя толку от этого…
>
> *«С точки зрения "чистого искусства" можно считать, что решалась задача:
> "Что можно втащить в Рефал из Пролога, не слишком разваливая
> функциональность Рефала.»*
>
> На Прологе я не программировал, поэтому задача мне несколько чужда.
>
> *«А более антифункциональная вещь в Рефале Плюс - это то, что неуспехи
> могут вылезать за пределы функции. Тут уже явной прологовщиной
> припахивает.»*
>
> На мой взгляд, вызовы чистых функций, функций, возвращающих неуспех
> и функций «ввода-вывода» (недетерминированных/с побочными эффектами)
> должны различаться синтаксически. Например, имена последних двух категорий
> должны начинаться/заканчиваться соответственно на ? и !. Т.е. это
> не соглашение, а требование синтаксиса языка. И функция ввода-вывода не может
> возвращать неуспех. Да, и функции ввода-вывода не могут вызываться
> в условиях Рефала-5 (или эквивалентных им конструкциях других диалектов).
>
> Соображения — в первую очередь стилистические. Второстепенное —
> возможность оптимизации и более эффективной кодогенерации (в том числе
> включая и распараллеливание).
>
> *«А "правильный" (с "религиозной" точки зрения) способ работы с
> переборными алгоритмами был описан вот в этой "культовой статье":»*
>
> Надо будет почитать.
>
> *«Что же касается Рефала Плюс, то до изготовления, скажем,
> суперкомпилятора для него - дело так и не дошло.»*
>
> Значит, всё впереди. Хотя, казалось бы, с препринтов 30 лет прошло.
>
> Спасибо за ответ,
> Александр Коновалов
>
>
>
> *From**:* sergei.romane...@gmail.com [mailto:sergei.romane...@gmail.com]
> *On* *Behalf Of *Sergei Romanenko
> *Sent:* Tuesday, February 13, 2018 1:22 AM
> *To:* Refal Botik <refal@botik.ru>
> *Subject:* Re: Прогонка для Рефала-4 (Плюс) и $iter
>
>
>
> 2018-02-13 0:49 GMT+03:00 Александр Коновалов <a.v.konovalo...@mail.ru>:
>
> *«Вот, во втором издании книги … есть глава, в которой подробно описан
> виртуальный код, и как в него Рефал Плюс компилируется.»*
>
> Новая глава во втором издании — это «Принципы реализации Рефала Плюс»?
> Т.е. для экономии времени можно начать с неё?
>
>
>
> Да. Сам Рефал Плюс - тот же самый. Но, правда, кое-какие косметические
> "подкрутки" во входном языке сделали. Например, заменили имена функций,
> вроде, "+"  на текстовые идентификаторы. Это сделали, чтобы "улучшить"
> интерфейс с Явой. Но, может быть, лучше было бы строго придерживаться того
> входного языка, что был в первом издании.
>
>
>
> *«А другой мотив был - сделать выразимым на Рефале Плюс то, что было
> выразимо на уровне виртуального кода (= языке сборки).»*
>
> На первый взгляд это воспринимается как «хвост виляет собакой». Но надо
> почитать соответствующую главу, вероятно, станет понятнее.
>
>
>
> Вилять должны пользователи. А, поскольку после 1991, сообщество
> пользователей разбрелось в разные стороны (искать подножный корм),
> появилась неслыханная свобода творчества. Раньше надо было оглядываться по
> сторонам, и думать: "а что люди скажут"? А когда "люди" исчезли, то стало
> хорошо! Поразглядывал собственный пуп, и, раз - и какую-нибудь "загогулину"
> в язык вставил. А "люди" ничего на это и не скажут (потому что их больше
> нет вокруг).
>
> Поэтому многие вещи и Рефале Плюс и выглядят как "искусство для
> искусства". Ставятся некоторые формалистические задачи - и успешно
> решаются. А что язык получился при этом слишком сложный, с точки зрения
> "простого народа", так ведь тут по принципу: "нет народа - нет проблем".
>
>
>
> Сначала наличие оператора цикла в функциональном языке мне (как ценителю
> функционального программирования) немного рвало шаблон. А после прогонки я
> стал воспринимать его более спокойно. Довольно интересная и в чём-то даже
> красивая конструкция, вполне в духе Рефала Плюс. Правда в синтаксисе
> немного странно воспринимается источник, в котором используются переменные,
> присваиваемые дальше по тексту.
>
>
>
> С точки зрения "чистого искусства" можно считать, что решалась задача:
> "Что можно втащить в Рефал из Пролога, не слишком разваливая
> функциональность Рефала.
>
>
>
> С другой стороны, наличие такого оператора цикла не мешает функции быть
> чистой снаружи. Я, как ценитель функционального программирования,
> предпочитаю функции, не зависящие от глобального состояния (статических
> ящиков, копилок) — всё, чем она оперирует, известно из входного и выходного
> формата.
>
>
>
> Да, это верно. Сам по себе $iter функциональность подрывает только
> стилистически, но не по существу. Ибо фактически он является просто формой
> записи хвостовой рекурсии.
>
> А более антифункциональная вещь в Рефале Плюс - это то, что неуспехи могут
> вылезать за пределы функции. Тут уже явной прологовщиной припахивает.
>
> А "правильный" (с "религиозной" точки зрения) способ работы с переборными
> алгоритмами был описан вот в этой "культовой статье":
>
>    - Philip Wadler. 1985. How to replace failure by a list of successes.
>    In *Proc. of a conference on Functional programming languages and
>    computer architecture*, Jean-Pierre Jouannaud (Ed.). Springer-Verlag
>    New York, Inc., New York, NY, USA, 113-128.
>    https://rkrishnan.org/files/wadler-1985.pdf
>
> А ещё, красиво получилось в примере — функция с повторными переменными
> полностью прогналась, и операция анализа (причём чисто анализа) оказалась
> описана циклом. Но вот все написанные выкладки довольно сложно
> алгоритмизировать (по крайней мере я пока не знаю, как это делается).
> Сергей! Уж не поэтому ли Вы в препринте написали, что преобразования
> прогонки на Рефале-4 есть исчисление, а не алгоритм?
>
>
>
> Да, прогонка у Турчина - это "исчисление", а не алгоритм. А на её основе
> можно уже делать что-то более сложное. Например, УРА или суперкомпиляцию. А
> при превращении исчисления в алгоритм появляются всякие "эвристики" и
> "стратегии".
>
> Поэтому, для начала, надо было придумать хотя бы исчисление. Кстати,
> Лейбниц когда-то придумал именно "исчисление бесконечно малых", которое
> состояло из правил. А как применять правила - это уже человек должен был
> решать. Хотя, при этом, Лейбниц мечтал о том, чтобы "заменить размышления
> вычислениями". Т.е. - реально он мечтал об алгоритмах. Но программы
> аналитического интегрирования, например, появились только в 20-м веке.
>
>
>
> Что же касается Рефала Плюс, то до изготовления, скажем, суперкомпилятора
> для него - дело так и не дошло.
>
> СР
>



-- 
_______________
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*

Ответить