2012-04-21 15 views
0

テーブルベースのリアクティブ宣言型プログラミングをサポートするプログラミング言語またはパッケージが、SQL言語およびトリガ機能とよく似ていますか?だから、基本的に、私はテーブルの計算列を持っていると思いテーブルベースの宣言型リアクティブプログラミング

childcount: PERSON -> INTEGER 
childcount(P) = |{ Q in PERSON : father(Q) = P or mather(Q) = P }| 

income: PERSON -> INTEGER 
income(P) = SUM { salary(J) : J in JOB and empoyee(J) = P } 

incomeperchild: PERSON -> INTEGER 
incomeperchild(P) = income(P)/childcount(P) 

parent: PERSON x PERSON -> BOOLEAN 
person(P,Q) = (P = father(Q)) or (P = mother(Q)) 

error: PERSON -> BOOLEAN 
error(P) = (female(P) and (exists Q in PERSON)(father(Q) = P)) 
    or (not female(P) and (exists Q in PERSON)(mother(Q) = P)) 
    or (exists Q in PERSON)(parent(P,Q) and error(Q)) 

name: PERSON -> STRING 
female: PERSON -> BOOLEAN 
mother: PERSON -> PEOPLE 
father: PERSON -> PEOPLE 

title: JOB -> STRING 
company: JOB -> STRING 
salary: JOB -> INTEGER 
empoyee: JOB -> PERSON 

を機能として

例えば、私はその後、私は同じような機能を計算したいPERSONJOBテーブルを定義することができますテーブルの値が変更されるたびに自動的に更新されます。同様のことをSQLトリガーで表現することもできますが、そのような機能を言語に組み込み、メモリ内で実行したいと考えています。変化の伝播を最適化する必要があります。これを行うためのフレームワークはありますか?

オブザーバーのパターンとリアクティブプログラミングは、個々のオブジェクトに焦点を合わせます。しかし、私はテーブルの各行にポインタと余分な構造を維持したくないので、何百万行もかかる可能性があります。すべてのルールは一般的です(ただし、親子関係を介して異なる行を参照することもできます)ので、何らかの再帰が必要です。これにアプローチする

+0

[OK]を、私の例では本当に簡単です。私が心に留めている計算はもっと複雑です(サーバーとクライアントの両方のインタラクティブなWeb、データベースからの結果を待つ、新しい情報をダウンロードする、多くのオブジェクトをパッケージする、など)。もちろん、これはまっすぐなOOPで行うこともできますが、非常に迅速に複雑になります。さらに、他の列が完全に計算されるまで、特定の列の計算を延期したいと思います。更新機能を呼び出すだけでは変更できないため、すべての変更を一度にコミットする必要があるため、これはOOPでは難しい作業です。 – mmaroti

+0

あなたはhttp://www.espressologic.comを探しているかもしれません –

答えて