J'ai récemment refactorisé de gros morceaux de code et les remplacer par des requêtes Linq.
Suppression du biais linguistique - Linq est essentiellement un ensemble d'opérations Map / Filter and Reduce qui opèrent sur une séquence de données.
Cela m'a fait réfléchir, jusqu'où serais-je théoriquement capable de prendre cela. Serais-je capable de réécrire la base de code entière en une série (ou même une seule) d'opérations de carte / filtre et de réduction.
Malheureusement, je suis payé pour faire des choses utiles, donc je n'ai pas pu expérimenter beaucoup plus, mais je ne pense à aucune structure de code qui ne pourrait pas être restructurée en tant que telle. Le code à effets secondaires peut être traité via des monades. Même la sortie mappe essentiellement les adresses mémoire aux adresses d'écran.
Y a-t-il quelque chose qui ne pourrait pas (théoriquement) être réécrit en tant que requête Linq?
la source
my_list.map(_ignored => a copy of my_list)
, il semble que l'utilisation de l'espace d'un tel programme soit limitée par un polynôme (en fonction de la longueur du programme). Alors un tel langage ne pourrait certainement pas calculer des problèmes qui ne sont pas dans PSPACE. Cependant, comme de nombreux problèmes dans PSPACE sont considérés comme insolubles, sans parler des classes plus importantes, cela peut ne pas être une restriction très sérieuse.Réponses:
C'est ce qu'on appelle la programmation fonctionnelle, et est considéré par beaucoup comme un concept fondamental. voici une bonne introduction sur Joel On Software . La réponse la plus technique est non, il n'existe actuellement aucun moyen connu de poser à votre ordinateur des questions (d'une manière bien définie) auxquelles il est impossible de répondre via SKI calculus.
la source
map
,filter
etreduce
(cela va trois fois si nous ignorons l'intégralité de turing et utilisons des langages FP pratiques). En fait, ils se trouvent être assez généraux et donc généralement utiles, mais sont en fait des applications très simples de programmation fonctionnelle. Le calcul lambda minimum nu peut définir ces fonctions parmi beaucoup d'autres, et non l'inverse.