Доброй ночи, Сергей!

«Вот, во втором издании книги … есть глава, в которой подробно описан 
виртуальный код, и как в него Рефал Плюс компилируется.»

Новая глава во втором издании — это «Принципы реализации Рефала Плюс»? Т.е. для 
экономии времени можно начать с неё?

«А другой мотив был - сделать выразимым на Рефале Плюс то, что было выразимо на 
уровне виртуального кода (= языке сборки).»

На первый взгляд это воспринимается как «хвост виляет собакой». Но надо 
почитать соответствующую главу, вероятно, станет понятнее.

«Но, ежели смотреть на вопрос с точки зрения "функционального 
программирования", то $iter - это явная гадость, поскольку эта конструкция - 
классический итеративный цикл. А "по-функциональному" итеративные циклы следует 
изображать в виде хвостовой рекурсии. Во всяком случае, это так, если считать 
"функциональное программирование" некоей разновидностью религии. Перекрестился 
не так, "как положено" - отрубить руку! 😬»

Сначала наличие оператора цикла в функциональном языке мне (как ценителю 
функционального программирования) немного рвало шаблон. А после прогонки я стал 
воспринимать его более спокойно. Довольно интересная и в чём-то даже красивая 
конструкция, вполне в духе Рефала Плюс. Правда в синтаксисе немного странно 
воспринимается источник, в котором используются переменные, присваиваемые 
дальше по тексту.

С другой стороны, наличие такого оператора цикла не мешает функции быть чистой 
снаружи. Я, как ценитель функционального программирования, предпочитаю функции, 
не зависящие от глобального состояния (статических ящиков, копилок) — всё, чем 
она оперирует, известно из входного и выходного формата.

А ещё, красиво получилось в примере — функция с повторными переменными 
полностью прогналась, и операция анализа (причём чисто анализа) оказалась 
описана циклом. Но вот все написанные выкладки довольно сложно 
алгоритмизировать (по крайней мере я пока не знаю, как это делается). Сергей! 
Уж не поэтому ли Вы в препринте написали, что преобразования прогонки на 
Рефале-4 есть исчисление, а не алгоритм?

С уважением,
Александр Коновалов

Ответить