Im Kern ist eine Kalkulationstabelle eine funktionale Sprache mit dynamischer Typisierung, und jede Funktion oder jeder Wert kann als Zelle in der Matrix referenziert werden.
Anstelle von Dingen wie wird (defn some-name ...)
das some-name
Teil in einer Zelle selbst platziert.
Wenn Sie zu einer dynamisch aktualisierten Funktionssprache wechseln (z. B. lighttable für clojure), sehen Sie einen Großteil derselben Funktionalität wie bei einer Tabellenkalkulation. Binden Sie einen Wert an einen Namen, schreiben Sie eine Funktion, die diesen Wert verwendet, ändern Sie den Wert und die Ausgabe der Funktion ändert sich sofort. Dies ist dasselbe, als würde man etwas =A1 + B2
an der Stelle von C3
in Excel schreiben .
So schreiben funktionale Programmierer oft Tabellenkalkulationen als Spielzeugprogramme ... und auch das Thema von Forschungsarbeiten. (Ja, es tut mir leid, sie stehen alle hinter einer ACM.org-Paywall.)
Tabellenkalkulationsprogrammierung
Die Community für funktionale Programmierung hat ein gewisses Interesse an Arbeitsblättern gezeigt, aber überraschenderweise scheint niemand darüber nachgedacht zu haben, ein Standard-Arbeitsblatt wie Excel mit einer Standardsprache für funktionale Programmierung wie Haskell arbeiten zu lassen. In diesem Artikel zeigen wir einen Weg, wie dies getan werden kann. Wir hoffen, dass wir auf diese Weise Tabellenkalkulationsprogrammierer dazu bringen, die funktionale Programmierung auszuprobieren.
Forms / 3: Eine visuelle Sprache erster Ordnung, um die Grenzen des Tabellenkalkulationsparadigmas zu erkunden
Obwohl Kritiker der funktionalen Programmierung manchmal behaupten, dass die funktionale Programmierung für die meisten Programmierer zu schwierig oder nicht intuitiv zu verstehen und zu verwenden ist, kann anhand der Popularität von Tabellen das Gegenteil nachgewiesen werden. Das Spreadsheet-Paradigma, eine Untermenge erster Ordnung des funktionalen Programmierparadigmas, hat sowohl bei Programmierern als auch bei Endbenutzern breite Akzeptanz gefunden. Dennoch gibt es bei den meisten Tabellenkalkulationssystemen viele Einschränkungen. In diesem Artikel werden Sprachmerkmale erörtert, mit denen einige dieser Einschränkungen beseitigt werden, ohne vom deklarativen Bewertungsmodell erster Ordnung abzuweichen.
Implementieren von Funktionskalkulationen
Ein großer Teil der Endbenutzerentwicklung wird mit Tabellenkalkulationen durchgeführt. Die Tabellenkalkulationsmetapher ist attraktiv, weil sie visuell ist und interaktives Experimentieren ermöglicht, aber wie von Peyton Jones, Blackwell und Burnett beobachtet, lässt die Tabellenkalkulationsmetapher nicht einmal die grundlegendste Abstraktion zu: die Umwandlung eines Ausdrucks in eine benannte Funktion. Daher schlugen sie eine Möglichkeit vor, eine Funktion in Form eines Arbeitsblatts mit festgelegten Eingabe- und Ausgabezellen zu definieren. wir werden es ein Funktionsblatt nennen.
Der Start von Spreadsheet bei Wikipedia gibt einige Hinweise zur Implementierung:
Eine Tabelle ist ein interaktives Computeranwendungsprogramm zur Organisation und Analyse von Daten in Tabellenform. Tabellenkalkulationen wurden als computergestützte Simulationen von Papierbuchhaltungs-Arbeitsblättern entwickelt. Das Programm verarbeitet Daten, die als Zellen eines Arrays dargestellt werden und in Zeilen und Spalten angeordnet sind. Jede Zelle des Arrays ist ein Model-View-Controller-Element, das entweder numerische oder Textdaten oder die Ergebnisse von Formeln enthalten kann, die automatisch einen Wert basierend auf dem Inhalt anderer Zellen berechnen und anzeigen.
Aufbauend auf dem in den Java-Bibliotheken zum Ausdruck gebrachten Modell-View-Controller-Paradigma . Der Autor erwähnt weiterhin Applets (ein bisschen veraltet, sie wurden zwischen '93 und '96 geschrieben) und erwähnt seine Webseite, die zu http://csis.pace.edu/~bergin/Java/applets.htm (yes) führt , Applets) für den entsprechenden Tabellenkalkulationscode http://csis.pace.edu/~bergin/Java/Spreadsheet.java
Ich werde darauf hinweisen, dass die Gesamtheit der Tabelle in diesem Applet 570 Zeilen einschließlich Dokumentation nicht so groß ist.
Das heißt, je nach Sprache könnten Sie wahrscheinlich alles mit nur Funktionszeigern in einem spärlichen Array tun.