Недавно я проводил рефакторинг больших кусков кода и заменял их запросами Linq.
Удаление языкового смещения. Linq - это набор операций Map / Filter и Reduce, которые работают с последовательностью данных.
Это заставило меня задуматься, насколько теоретически я смогу это сделать. Смогу ли я переписать всю кодовую базу в серию (или даже одну) операций Map / Filter и Reduce.
К сожалению, мне платят за то, что я делаю полезные вещи, поэтому я не смог больше экспериментировать, но я не могу представить себе какую-либо структуру кода, которая не может быть реструктурирована как таковая. Побочный код может быть обработан через монады. Даже вывод по существу отображает адреса памяти на экранные адреса.
Есть что-нибудь, что нельзя (теоретически) переписать как запрос Linq?
my_list.map(_ignored => a copy of my_list)
, кажется, что использование такой программы в пространстве ограничено каким-то полиномом (в зависимости от длины программы). Тогда такой язык, конечно, не может вычислить проблемы, которых нет в PSPACE. Тем не менее, поскольку многие проблемы в PSPACE считаются внутренними, не говоря уже о больших классах, это не может быть очень серьезным ограничением.