Ich habe kürzlich große Codestücke überarbeitet und durch Linq-Abfragen ersetzt.
Entfernen der sprachlichen Verzerrung - Linq besteht im Wesentlichen aus einer Reihe von Map / Filter- und Reduce-Operationen, die mit einer Datensequenz ausgeführt werden.
Das brachte mich zum Nachdenken, wie weit ich das theoretisch bringen könnte. Wäre es mir möglich, die gesamte Codebasis in eine Reihe (oder sogar eine einzige) von Map / Filter- und Reduce-Operationen umzuschreiben?
Leider werde ich dafür bezahlt, nützliche Dinge zu tun, so dass ich nicht viel weiter experimentieren konnte, aber ich kann mir keine Codestruktur vorstellen, die nicht als solche neu strukturiert werden könnte. Nebeneffekt-Code kann über Monaden behandelt werden. Auch die Ausgabe besteht im Wesentlichen darin, Speicheradressen auf Bildschirmadressen abzubilden.
Gibt es etwas, das (theoretisch) nicht als Linq-Abfrage umgeschrieben werden kann?
quelle
my_list.map(_ignored => a copy of my_list)
, scheint der Platzbedarf eines solchen Programms durch ein Polynom begrenzt zu sein (abhängig von der Programmlänge). Dann könnte eine solche Sprache sicherlich keine Probleme berechnen, die nicht in PSPACE sind. Da jedoch viele Probleme in PSPACE als unlösbar angesehen werden, ganz zu schweigen von größeren Klassen, ist dies möglicherweise keine sehr schwerwiegende Einschränkung.Antworten:
Es heißt funktionale Programmierung und wird von vielen als grundlegendes Konzept angesehen. Hier ist ein gutes Intro über Joel On Software . Die technischere Antwort lautet "Nein". Derzeit ist keine Methode bekannt, mit der Sie (genau definierte) Fragen an Ihren Computer stellen können, die nicht über die SKI-Berechnung beantwortet werden können.
quelle
map
,filter
undreduce
(dies geht dreimal , wenn wir Turing Vollständigkeit und nutzen praktische FP Sprachen ignorieren). Tatsächlich sind sie eher allgemein gehalten und daher allgemein nützlich, aber tatsächlich sind sie sehr einfache Anwendungen der funktionalen Programmierung. Bare Minimum Lambda Calculus kann diese Funktionen unter vielen anderen definieren, nicht umgekehrt.