回答:
基本的に、スプレッドシートは動的型付けを備えた関数型言語であり、各関数または値はマトリックス内のセルとして参照できます。
代わりのようなものの一部はセル自体に配置されます。(defn some-name ...)
some-name
動的に更新する関数型言語ide(clojureのlighttableなど)にアクセスすると、スプレッドシートと同じ機能の多くが表示されます。値を名前にバインドし、その値を使用する関数を作成し、値を変更すると、関数の出力がすぐに変更されます。これは、Excelの=A1 + B2
場所で書くようなことをするのと同じC3
です。
したがって、機能的なプログラマーは、スプレッドシートをおもちゃのプログラムとして書くことを好むことが多く、研究論文の主題でもあります。(はい、すみません、それらはすべてACM.orgペイウォールの背後にあります)
関数型プログラミングコミュニティはスプレッドシートにある程度の関心を示していますが、驚くべきことに、Excelなどの標準的なスプレッドシートをHaskellなどの標準的な関数型プログラミング言語で動作させることを検討している人はいません。このホワイトペーパーでは、これを実現する1つの方法を示します。そうすることで、スプレッドシートプログラマーに関数型プログラミングを試してもらうことができます。
Forms / 3:スプレッドシートパラダイムの境界を探索するための1次視覚言語
関数型プログラミングの中傷者は、関数型プログラミングはほとんどのプログラマーにとって理解と使用が難しいか直観に反すると主張することがありますが、スプレッドシートの人気を調べることで反対の証拠を見つけることができます。関数型プログラミングパラダイムの1次サブセットであるスプレッドシートパラダイムは、プログラマーとエンドユーザーの両方に広く受け入れられています。それでも、ほとんどのスプレッドシートシステムには多くの制限があります。このホワイトペーパーでは、1次の宣言的評価モデルから逸脱することなく、これらの制限のいくつかを排除する言語機能について説明します。
スプレッドシートを使用して、大量のエンドユーザー開発が行われます。スプレッドシートのメタファーは視覚的でインタラクティブな実験に対応しているため魅力的ですが、Peyton Jones、Blackwell、およびBurnettが観察したように、スプレッドシートのメタファーは最も基本的な抽象化さえも認めません:式を名前付き関数に変換することです。したがって、彼らは、指定された入力および出力セルを持つワークシートに関して関数を定義する方法を提案しました。これを関数シートと呼びます。
ウィキペディアでのスプレッドシートの開始は、それを実装する方法に関するいくつかのヒントを提供します。
スプレッドシートは、表形式のデータを整理および分析するためのインタラクティブなコンピューターアプリケーションプログラムです。紙の会計ワークシートのコンピューター化されたシミュレーションとして開発されたスプレッドシート。このプログラムは、行と列に編成された配列のセルとして表されるデータを操作します。配列の各セルは、数値またはテキストデータ、または他のセルの内容に基づいて値を自動的に計算して表示する数式の結果を含むことができるモデルビューコントローラー要素です。
Javaライブラリで表現されるModel-View-Controllerパラダイムの概要からこれを構築します。作者はさらにアプレットに言及し(少し古く、'93 -'96に書かれていました)、http://csis.pace.edu/~bergin/Java/applets.htmに行く彼のWebページに言及しています(はい、アプレット)対応するスプレッドシートコードhttp://csis.pace.edu/~bergin/Java/Spreadsheet.java
スプレッドシート全体が、ドキュメントを含むこのアプレット570行ではそれほど大きくないことを指摘します。
ただし、言語によっては、おそらくスパース配列の関数ポインターだけですべてを実行できます。
概念的には、各セルは有向非巡回グラフのノードであり、他のセルへの参照はそのグラフにエッジを作成します。あなたはセルを変更すると、トポロジカルソートあなたが変わっセルから到達可能なすべてのノードのは、あなたがた細胞を評価する必要がある順序を提供します。正しい順序を決定したら、それは単なる標準式の構文解析です。
既に述べたように、スプレッドシートは、単純なハッシュまたは辞書に保存されたDAG(有向非巡回グラフ)として簡単に実装できます。プレイするためのいくつかの簡単なコードは、おそらくそれを理解する最も簡単な方法です。
非常に単純なPythonバージョン:http : //code.activestate.com/recipes/355045-spreadsheet/
これは、このブログ投稿で説明され、詳しく説明されています:http : //ralsina.me/weblog/posts/BB585.html
GUIを備えたシンプルなJavaScriptバージョンもここにあります:http : //jsfiddle.net/ondras/hYfN3/
MS Excelファイルの目的関数セル構造をPythonに変換できるPythonパッケージをコーディングしました。XL2py
セル値はdict()型オブジェクトに解析され、値が追加されます。数式によって他のセルを参照するセルはノードを構成します。ノードは、式によって値が定義されるセルを参照します。各ノード式から、循環参照が存在するかどうかを定義するために、依存構造が定義されます。ノードの計算順序は、関連するセルの依存構造を考慮して定義されます。
I / Oツリー構造の時点では、Pythonに実装されている最小化アルゴリズムを自由に使用できます。
https://github.com/gusmaogabriels/XL2pyをご覧になることをお勧めします
よろしく、ガブリエル