1

SQL 言語およびトリガー機能と非常によく似た、メモリ内でのテーブルベースのリアクティブ宣言型プログラミングをサポートするプログラミング言語またはパッケージはありますか?

たとえば、PERSONテーブルJOBを関数として定義できます

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

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

次に、次のような関数を計算したいと思います。

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))

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

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

4

1 に答える 1

0

これにアプローチする 1 つの方法は、属性文法を使用することです: http://www.haskell.org/haskellwiki/Attribute_grammar

于 2013-02-05T01:34:45.577 に答える