純粋なデータフロースタイルで「増分更新」関数を構成するためのパラダイムはありますか?
この質問をするための正しい用語がわからないので、代わりにたくさんの言葉で説明します。 背景、同じページにいるだけです。プログラムにはキャッシュが含まれていることが多く、時間とメモリのトレードオフです。プログラマーのよくある間違いは、上流のソース/前例の1つを変更した後、キャッシュされた値を更新するのを忘れることです。しかし、データフローまたはFRPプログラミングパラダイムは、そのような間違いの影響を受けません。純粋な関数がいくつかあり、それらを有向ディペンデンシーグラフで接続している場合、ノードは出力値をキャッシュし、関数の入力が変更されるまで再利用できます。このシステムアーキテクチャは、Dataflowベースの環境でのキャッシングペーパーで説明されており、命令型言語では、メモ化とほぼ同じです。 問題:関数への入力の1つが変化しても、関数全体を実行し、キャッシュされた出力を破棄して、最初から再計算する必要があります。多くの場合、これは私にとって無駄に思えます。「トップ5なんでも」リストを生成する簡単な例を考えてみましょう。入力データは、何も並べ替えられていないリストです。ソートされたリストを出力する関数への入力として渡されます。これは、最初の5項目のみを受け取る関数に入力されます。疑似コード: input = [5, 20, 7, 2, 4, 9, 6, 13, 1, 45] intermediate = sort(input) final_output = substring(intermediate, 0, 5) ソート関数の複雑さはO(N log N)です。ただし、このフローは、1つの要素を追加することで、入力が一度に少しだけ変化するアプリケーションで使用されることを考慮してください。毎回最初から再ソートするよりも、実際にはO(N)の方が、新しい要素を正しい位置に挿入することにより、古いキャッシュソートリストを更新する関数を使用する方が高速です。これはほんの一例にすぎません-多くの「最初から」の関数には、そのような「増分更新」の対応物があります。また、新しく追加された要素は5番目の位置にあるため、final_outputにも表示されない場合があります。 私の直感は、このような「増分更新」関数を、既存の「最初から」関数と並べて、データフローシステムに何らかの方法で追加できる可能性があることを示唆しています。もちろん、すべてを最初から再計算すると、常に一連の増分更新を実行した場合と同じ結果が得られます。システムは、その性質を持っている必要がある場合は、個々のプリミティブFromScratch-インクリメンタルペアのそれぞれが常に同じ結果が得られ、その後、彼らから構築された大規模複合機能も自動的に同じ結果を与える必要があります。 質問:FromScratch関数とそのインクリメンタル関数の両方をサポートし、効率を高めるために協力し、大きなフローに構成できるシステム/アーキテクチャ/パラダイム/メタアルゴリズムを使用することは可能ですか?そうでない場合、なぜですか?誰かがこのパラダイムをすでに研究して公開している場合、それは何と呼ばれ、どのように機能するかの簡単な要約を入手できますか?