Recientemente he estado refactorizando grandes fragmentos de código y reemplazándolos con consultas de Linq.
Eliminar el sesgo de idioma: Linq es esencialmente un conjunto de operaciones de Mapa / Filtro y Reducción que operan en una secuencia de datos.
Esto me hizo pensar, ¿hasta dónde podría llegar en teoría? ¿Podría reescribir todo el código base en una serie (o incluso una sola) de operaciones de Mapa / Filtro y Reducción.
Desafortunadamente, me pagan por hacer cosas útiles, por lo que no he podido experimentar mucho más, pero no puedo pensar en ninguna estructura de código que no se pueda reestructurar como tal. El código de efecto lateral puede tratarse a través de mónadas. Incluso la salida es esencialmente asignar direcciones de memoria a direcciones de pantalla.
¿Hay algo que no pueda (teóricamente) reescribirse como una consulta de Linq?
my_list.map(_ignored => a copy of my_list)
cosas sin sentido , parece que el uso del espacio de dicho programa está limitado por algún polinomio (dependiendo de la duración del programa). Entonces, tal lenguaje ciertamente no podría calcular problemas que no están en PSPACE. Sin embargo, como muchos problemas en PSPACE se consideran invencibles, por no mencionar las clases más grandes, esto puede no ser una restricción muy seria.