Alla base, un foglio di calcolo è un linguaggio funzionale con tipizzazione dinamica e ogni funzione o valore può essere referenziato come una cella nella matrice.
Invece di cose come (defn some-name ...)
la some-name
parte è collocata in una cella stessa.
Se vai a un ide di linguaggio funzionale con aggiornamento dinamico (come lighttable for clojure), vedrai molte delle stesse funzionalità di un foglio di calcolo. Associare un valore a un nome, scrivere una funzione che utilizza quel valore, modificare il valore e l'output della funzione cambia immediatamente. È come fare qualcosa come scrivere =A1 + B2
nella posizione di C3
in Excel.
Pertanto, ai programmatori funzionali spesso piace scrivere fogli di calcolo come programmi giocattolo ... e anche argomento di articoli di ricerca. (Sì, mi dispiace, sono tutti dietro un paywall di ACM.org)
Programmazione funzionale del foglio di calcolo
La comunità di programmazione funzionale ha mostrato un certo interesse per i fogli di calcolo, ma sorprendentemente nessuno sembra aver preso in considerazione l'idea di creare un foglio di calcolo standard, come Excel, con un linguaggio di programmazione funzionale standard, come Haskell. In questo documento, mostriamo un modo in cui ciò può essere fatto. La nostra speranza è che così facendo potremmo ottenere programmatori di fogli di calcolo per provare la programmazione funzionale.
Forms / 3: un linguaggio visivo di primo ordine per esplorare i confini del paradigma del foglio di calcolo
Sebbene i detrattori della programmazione funzionale a volte sostengano che la programmazione funzionale sia troppo difficile o controintuitiva per la maggior parte dei programmatori per capire e utilizzare, è possibile trovare prove contrarie osservando la popolarità dei fogli di calcolo. Il paradigma del foglio di calcolo, un sottoinsieme del primo ordine del paradigma della programmazione funzionale, ha trovato ampia accettazione sia da parte dei programmatori che degli utenti finali. Tuttavia, ci sono molte limitazioni con la maggior parte dei sistemi di fogli di calcolo. In questo documento, discutiamo delle caratteristiche del linguaggio che eliminano molte di queste limitazioni senza deviare dal modello di valutazione dichiarativo del primo ordine.
Implementazione di fogli di calcolo delle funzioni
Una grande quantità di sviluppo degli utenti finali viene eseguita con fogli di calcolo. La metafora del foglio di calcolo è attraente perché è visiva e accoglie la sperimentazione interattiva, ma come osservato da Peyton Jones, Blackwell e Burnett, la metafora del foglio di calcolo non ammette nemmeno l'astrazione più elementare: quella di trasformare un'espressione in una funzione con nome. Quindi hanno proposto un modo per definire una funzione in termini di un foglio di lavoro con celle di input e output designate; lo chiameremo un foglio funzionale.
L'inizio di Spreadsheet su Wikipedia fornisce alcuni suggerimenti su come implementarne uno:
Un foglio di calcolo è un programma applicativo interattivo per computer per l'organizzazione e l'analisi dei dati in forma tabellare. Fogli di calcolo sviluppati come simulazioni computerizzate di fogli di lavoro di contabilità cartacea. Il programma opera su dati rappresentati come celle di un array, organizzati in righe e colonne. Ogni cella dell'array è un elemento di controllo vista modello che può contenere dati numerici o di testo o i risultati di formule che calcolano e visualizzano automaticamente un valore in base al contenuto di altre celle.
Partendo da questo dal paradigma Schema di Model-View-Controller espresso nelle librerie Java . L'autore continua a menzionare applet (un po 'datato, è stato scritto nel '93 -'96) e menziona la sua pagina web che va su http://csis.pace.edu/~bergin/Java/applets.htm (sì , applet) per il codice del foglio di calcolo corrispondente http://csis.pace.edu/~bergin/Java/Spreadsheet.java
Sottolineerò che l'intero foglio di calcolo non è così grande in questa applet 570 righe inclusa la documentazione.
Detto questo, a seconda della lingua, probabilmente potresti fare tutto con solo i puntatori a funzione in una matrice sparsa.