マルチパラダむムプログラミング蚀語を蚭蚈したす。パヌト5-ロゞックプログラミングの機胜

宣蚀的な論理スタむルずオブゞェクト指向の機胜的なスタむルを組み合わせたマルチパラダむムプログラミング蚀語の䜜成に぀いおの話を続けたす。これは、半構造化デヌタを操䜜し、異なる゜ヌスからのデヌタを統合するずきに䟿利です。蚀語は、互いに緊密に統合された2぀のコンポヌネントで構成されたす。宣蚀コンポヌネントはドメむンモデルの蚘述を担圓し、必須たたは機胜コンポヌネントはモデルの操䜜ずコンピュヌティングのアルゎリズムの蚘述を担圓したす。



前回の 蚘事でハむブリッド蚀語モデリングコンポヌネントに぀いおの話を始めたした。これは䞀連の抂念であり、論理的な関係によっお接続されたオブゞェクトです。私は、抂念、継承、およびそれらの間の関係を定矩する䞻な方法に぀いお話すこずができたした。ハむブリッド蚀語の蚭蚈を開始するきっかけずなった理由ずその機胜は、このトピックに関する以前の出版物に蚘茉されおいたす。それらぞのリンクは、この蚘事の最埌にありたす。



そしお今、私はロゞックプログラミングのニュアンスのいく぀かに突入するこずを提案したす。モデリングコンポヌネントの蚀語は宣蚀的な論理圢匏であるため、吊定挔算子のセマンティクスの定矩、高次ロゞックの芁玠の導入、論理倉数を操䜜する機胜の远加などの問題を解決する必芁がありたす。これを行うには、䞖界の開攟性/閉鎖性の仮定、拒吊ずしおの吊定、安定したモデルのセマンティクス、十分に根拠のあるセマンティクスなどの理論的な問題に察凊する必芁がありたす。たた、高次ロゞックの可胜性が他の論理プログラミング蚀語でどのように実装されおいるかも瀺したす。



ブヌル倉数から始めたしょう



ほずんどのロゞックプログラミング蚀語では、倉数は任意のステヌトメントの蚘号指定プレヌスホルダヌずしお䜿甚されたす。それらは述語の匕数の䜍眮で発生し、述語を盞互に接続したす。たずえば、プロロヌグ蚀語の次のルヌルでは、倉数はオブゞェクトXず Yの圹割を果たし、 関係によっお盞互接続されたす 兄匟、 芪、 男性、䞍平等



brothers(X,Y) :- parent(Z,X), parent(Z,Y), male(X), male(Y), X\=Y.
      
      





モデリングコンポヌネントでは、甚語匕数の圹割は䞻に抂念属性によっお果たされたす。



concept brothers (person1, person2) FROM
parent p1 (child = person1),
parent p2 (child = person2),
male(person: person1),
male(person: person2)
WHERE p1.parent = p2.parent AND person1 != person2
      
      





SQLの堎合ず同様に、名前で盎接アクセスできたす。提案された構文はPrologに比べお扱いにくいように芋えたすが、属性の数が倚い堎合、このオプションはオブゞェクトの構造を匷調するため、より䟿利になりたす。



ただし、堎合によっおは、どの抂念の属性にも含たれず、同時に関係の匏で䜿甚されるブヌル倉数を宣蚀するず䟿利な堎合もありたす。たずえば、郚分匏が耇雑な圢匏である堎合、それらをブヌル倉数にリンクするこずにより、郚分匏をその構成芁玠に分解できたす。たた、郚分匏が耇数回䜿甚されおいる堎合は、倉数に関連付けるこずで1回だけ宣蚀できたす。そしお将来的には、匏の代わりに倉数を䜿甚しおください。ブヌル倉数を抂念属性および蚈算コンポヌネント倉数ず区別するために、ブヌル倉数名は$蚘号で始たる必芁があるず刀断したしょう 。

䟋ずしお、倖郚半埄ず内郚半埄で衚されるリングぞのポむントの垰属を指定する抂念を分析できたす。ポむントからリングの䞭心たでの距離は、䞀床蚈算し、倉数にリンクしお、半埄ず比范するこずができたす。



relation pointInRing between point p, ring r 
where $dist <= r.rOuter 
    and $dist >= r.rInner 
    and $dist = Math.sqrt((p.x – r.x) * (p.x – r.x) + (p.y – r.y) * (p.y – r.y))
      
      





同時に、この距離自䜓には補助的な圹割があり、抂念の䞀郚にはなりたせん。



吊定。



次に、より耇雑な問題、぀たりモデリングコンポヌネント内での吊定挔算子の実装を芋おみたしょう。論理プログラミングシステムには、通垞、ブヌル吊定の挔算子に加えお、拒吊ずしおの吊定のルヌルが含たれおいたす。これにより、pの導出に倱敗した堎合に、 pではなく印刷するこずができたす 。知識衚珟の異なるシステムでは、吊定の掚論の芏則の意味ずアルゎリズムの䞡方が異なる堎合がありたす。 たず、知識システムの完党性ずいう芳点から、その性質の問題に答える必芁がありたす。「オヌプンワヌルドの仮定」に準拠するシステムでは 、ナレッゞベヌスは䞍完党であるず芋なされるため、ナレッゞベヌスから欠萜しおいるステヌトメントは䞍明ず芋なされたす。pアサヌションで はありたせん



ナレッゞベヌスがpずいうステヌトメントを明瀺的に栌玍しおいる堎合にのみ出力できたす false。そのような吊定は匷いず呌ばれたす。欠萜しおいるステヌトメントは、誀りではなく䞍明ず芋なされたす。このような仮定を䜿甚した知識システムの䟋は、SemanticWEBです。これは、World WideWebに基づいお圢成された公的にアクセス可胜なグロヌバルセマンティックネットワヌクです。その䞭の情報は、定矩䞊、䞍完党です。完党にデゞタル化されお機械可読圢匏に倉換されるわけではなく、さたざたなノヌドに分散され、垞に補足されおいたす。たずえば、りィキペディアで、ワヌルドワむドりェブの䜜成者でセマンティックりェブの抂念の䜜成者であるティムバヌナヌズリヌに関する蚘事で、圌の料理の奜みに぀いお䜕も述べられおいない堎合、これは圌がそれらを持っおいないこずを意味するのではなく、蚘事は単に䞍完党です。



反察の仮定は 「䞖界が閉じおいるずいう仮定」です。..。そのようなシステムでは、知識ベヌスは完党であり、その䞭に欠萜しおいるステヌトメントは存圚しないか、たたは誀りであるず芋なされるず考えられおいたす。ほずんどのデヌタベヌスはこの仮定に埓いたす。デヌタベヌスにトランザクションたたはナヌザヌに関するレコヌドがない堎合、そのようなトランザクションは存圚せず、ナヌザヌはシステムに登録されおいたせん少なくずも、システムのロゞック党䜓は、それらが存圚しないずいう事実に基づいおいたす。



完党な知識ベヌスには利点がありたす。たず、䞍明な情報を゚ンコヌドする必芁はありたせん。3぀の倀true、false、unknownではなく、2぀の倀のロゞックtrue、falseで十分です。第二に、ブヌル吊定挔算子ず知識ベヌスからのステヌトメントの導出可胜性のチェックを組み合わせお、拒吊ずしお1぀の吊定挔算子 にするこずができたす。倱敗ずしおの吊定。ステヌトメントがfalseであるずいうステヌトメントが栌玍されおいる堎合だけでなく、ナレッゞベヌスにそれに関する情報がたったくない堎合もtrueを返したす。たずえば、

ルヌル



p <— not q





はqがfalseでありtrueであるずいうステヌトメントがないため、 pがtrueであるず掚枬し たす。



残念ながら、拒吊ずしおの拒吊のセマンティクスは、芋た目ほど明癜ではなく、耇雑でもありたせん。さたざたな論理プログラミングシステムでは、その意味には独自の特性がありたす。たずえば、埪環定矩の堎合



p ← not q
q ← not p
      
      





Prolog蚀語で䜿甚される埓来の SLDNF解決SLD +倱敗ずしおの吊定は倱敗したす。ステヌトメント pの出力にはqの出力が必芁 であり、 q - pでは、出力プロシヌゞャは無限ルヌプに陥りたす。 Prologでは、そのような定矩は無効ず芋なされ、知識ベヌスは䞀貫性がないず芋なされたす。



同時に、これらのステヌトメントは私たちにずっお問題ではありたせん。盎感的には、これら2぀のルヌルは、 pず q反察の意味を持ち、䞀方が真の堎合、もう䞀方は停です。したがっお、拒吊ずしおの吊定のオペレヌタヌがそのような芏則を扱うこずができ、論理プログラムの構築が人にずっおより自然で理解しやすいものであるこずが望たしい。



さらに、知識ベヌスの䞀貫性が垞に達成できるずは限りたせん。たずえば、ルヌル定矩をファクトから意図的に分離しお、同じルヌルセットを異なるファクトセットに適甚できるようにする堎合がありたす。この堎合、ルヌルがすべおの可胜な事実のセットに同意するずいう保蚌はありたせん。たた、たずえば、異なる専門家によっお䜜成された堎合など、ルヌル自䜓に䞀貫性がないこずも蚱容される堎合がありたす。



最もよく知られおいるキャンペヌンでは、呚期的な定矩の䞋で論理的な結論を圢匏化するこずができ、プログラムの䞍敎合は 「持続可胜なセマンティクス」安定したモデルセマンティクスず 「合理的なセマンティクス」十分に根拠のあるセマンティクスです。 氞続的なモデルセマンティクス



を䜿甚した掚論ルヌル は、プログラム内の䞀郚の吊定挔算子がプログラムの他の郚分ず䞀臎しない堎合、それらを無芖できるずいう仮定に基づいおいたす。ルヌルの初期セットのそのような䞀貫したサブセットがいく぀か存圚する可胜性があるため、それぞれいく぀かの解決策が存圚する可胜性がありたす。たずえば、䞊蚘の定矩では、掚論は最初のルヌルから開始できたす p←qではない、2番目q←pではないを砎棄し 、解{p、qではない}を取埗したす 。次に、2番目に぀いおも同じこずを行い、{pではなくq}を取埗し たす。党䜓的な゜リュヌションは、代替゜リュヌションの組み合わせセットになりたす。たずえば、ルヌルから



person(alex)
alive(X) ←person(X)
male(X) ←person(X) AND NOT female(X)
female(X) ←person(X) AND NOT male(X)
      
      





{personalex、alivealex、malealex}ず {personalex、alivealex、femalealex}の2぀の回答オプションを衚瀺できたす 。

合理的なセマンティクスは同じ仮定から始たりたすが、ルヌルのすべおの代替合意サブセットを満たす1぀の䞀般的な郚分的な解決策を芋぀けようずしたす。郚分的な解決策ずは、「true」たたは「false」の倀が事実の䞀郚に぀いおのみ衚瀺され、残りの倀は䞍明のたたになるこずを意味したす。したがっお、プログラム内のファクトの説明では、2倀のロゞックが䜿甚され、掚論のプロセスでは、3倀のロゞックが䜿甚されたす。䞊蚘のルヌルの堎合、pず qの䞡方の意味 䞍明になりたす。しかし、䟋えば、



p ← not q
q ←not p
r ← s
s
      
      





pず qは䞍明のたたですが、rずsが真である ず 自信を持っお掚枬でき たす。 たずえば、alexの䟋から、{personalex、alivealex}を掚枬できたすが 、malealexず female {alex}のステヌトメント は䞍明のたたです。 では SQL、ブヌル吊定 NOTずDerivabilityチェックが NOT EXISTS







は分離されおいたす。これらの挔算子は、さたざたなタむプの匕数に適甚されたす。NOTはブヌル倀を反転し、 EXISTS / NOT EXISTSはネストされたク゚リの結果の空をチェックするため、それらを組み合わせおも意味がありたせん。 SQLの吊定挔算子のセマンティクスは非垞に単玔であり、再垰的たたは耇雑な䞀貫性のないク゚リで機胜するようには蚭蚈されおいたせん。特別なSQLスキルを䜿甚するず、ク゚リを無限の再垰に送信できたす。ただし、耇雑な論理構造は明らかに埓来のSQLアプリケヌションの範囲倖であるため、高床な吊定挔算子セマンティクスは必芁ありたせん。



次に、蚭蚈されたハむブリッド蚀語のモデリングコンポヌネントの吊定挔算子のセマンティクスを理解しおみたしょう 。



たず、モデリングコンポヌネントは、異なるデヌタ゜ヌスを統合するように蚭蚈されおいたす。それらは非垞に倚様であり、完党たたは䞍完党のいずれかである可胜性がありたす。したがっお、導出可胜性チェック挔算子は絶察に必芁です。



次に、モデリングコンポヌネントの抂念の圢匏は、ロゞックプログラミングルヌルよりもSQLク゚リにはるかに近いものです。抂念も耇雑な構造であるため、ブヌル吊定の1぀の挔算子を混合しお、抂念の導出可胜性を確認するこずは意味がありたせん。ブヌル倀の吊定は、属性、倉数、および匏の結果にのみ適甚する意味がありたす。これらはfalseたたはtrueのいずれかになりたす。それを抂念に適甚するこずはより困難であり、それは異なる属性で構成されおいる可胜性があり、それらのどれが抂念党䜓の虚停たたは真実の原因であるかが明確ではありたせん。抂念は、個々の属性ではなく、党䜓ずしおの初期デヌタから導き出すこずができたす。テヌブルの構造が固定されおいるSQLずは異なり、抂念の構造は柔軟である可胜性があり、抂念の構成に必芁な属性がたったくない堎合がありたす。したがっお、属性の存圚も確認する必芁がありたす。



したがっお、䞊蚘の吊定のタむプごずに個別の挔算子を導入するこずは理にかなっおいたす。属性の停りは、埓来のブヌルNOT挔算子を䜿甚しおチェックでき 、抂念に組み蟌みのDEFINED関数を䜿甚しお属性が含たれおいるかどうか 、およびEXISTS関数を䜿甚しお元のデヌタから抂念を掚枬した結果を確認できたす 。 3぀の別々の挔算子は、耇雑な障害ずしおの吊定挔算子よりも予枬可胜で、理解しやすく、䜿いやすいです。必芁に応じお、特定のケヌスごずに意味のある方法で1぀の挔算子に組み合わせるこずができたす。



第䞉に、珟時点では、モデリングコンポヌネントは、小さなアプリケヌションレベルのオントロゞヌを䜜成するためのツヌルず芋なされおいたす。その蚀語は、プログラムの再垰的な定矩ず論理的な矛盟に察凊できる特別な論理的衚珟力ず掗緎された掚論芏則を必芁ずしない可胜性がありたす。したがっお、氞続モデルのセマンティクスたたは根拠のあるセマンティクスに基づく耇雑な掚論ルヌルの実装は、少なくずもこの段階では適切ではないようです。埓来のSLDNF解像床で十分です。



それでは、いく぀かの䟋を芋おみたしょう。



抂念の特定の属性がそれを瀺す意味を持っおいる堎合、その抂念に吊定的な意味を䞎えるこずができたす。属性を吊定するず、そのような゚ンティティを明瀺的に芋぀けるこずができたす。



concept unfinishedTask is task t where not t.completed
      
      





抂念の゚ンティティが異なる構造を持぀こずができる堎合、属性のあいたいさをチェックする機胜は䟿利です。



concept unassignedTask is task t where not defined(t.assignedTo) or empty(t.assignedTo)
      
      





抂念の掚論可胜性をチェックする機胜は、再垰的な定矩ず階局構造を操䜜するずきにかけがえのないものです。



concept minimalElement is element greater 
where not exists(element lesser where greater.value > lesser.value)
      
      





この䟋では、小さいアむテムの存圚のチェックがサブク゚リずしお実行されたす。次の出版物では、ネストされたク゚リの䜜成に぀いお詳しく怜蚎する予定です。



高次ロゞックの芁玠



で 䞀次ロゞック、倉数は、オブゞェクトのセットを䞀臎させるこずができ、唯䞀の述語の匕数の䜍眮に珟れたす。 高次ロゞック、圌らはたた、関係のセットに察応するこずができるず述語名の䜍眮に珟れたす。蚀い換えるず、1次ロゞックを䜿甚するず、すべおたたは䞀郚のオブゞェクトに察しお䜕らかの関係が真であるず䞻匵できたす。そしお、より高次の論理は、関係間の関係を蚘述するこずです。



たずえば、兄匟、姉効、子䟛たたは芪、叔父たたは叔母などであるず述べるこずができたす。



Brother(John, Joe).
Son(John, Fred).
Uncle(John, Alex).
      
      





ただし、関係アサヌションを䜜成するには、1次ロゞックで、䞊蚘のすべおのステヌトメントをリストし、OR挔算を䜿甚しおそれらを組み合わせる必芁がありたす。



ⱯX,ⱯY(Brother(X, Y) OR Brother(Y, X) OR Son(X, Y) OR Son(Y, X) OR Uncle(X, Y) OR Uncle(Y, X) → Relative(X, Y)).
      
      





2次ロゞックを䜿甚するず、他のステヌトメントに぀いおステヌトメントを䜜成できたす。たずえば、兄匟、姉効、芪ず子、叔父ず甥の間の関係は芪族関係であるず盎接述べるこずができたす。



RelativeRel(Brother).
RelativeRel(Son).
RelativeRel(Uncle).
ⱯX,ⱯY(ⱻR(RelativeRel(R) AND (R(X, Y) OR R(Y, X))) → Relative(X, Y)).
      
      





Xず Yごずに、RelativeRelの芪戚間の関係である関係 Rがあり 、 Xず Yがこの関係を満たす堎合、 Xず Yは芪戚であるず䞻匵し たす。関係匕数は他の関係にするこずができ、倉数は関係名の代わりに䜿甚できたす。 䞉次のロゞックはあなたがステヌトメントに関するステヌトメントに぀いおのステヌトメントを構築するこずを可胜にする、ずいうように、 高階述語論理



-ネストレベルのステヌトメントに぀いお。高次のロゞックははるかに衚珟力がありたすが、はるかに耇雑です。実際には、論理プログラミングシステムは、その芁玠の䞀郚のみをサポヌトしたす。これらの芁玠は、䞻に、述語の䜍眮での倉数ず任意の匏の䜿甚に制限されおいたす。



で プロロヌグ、そのようなロゞックの芁玠が他の述語であるの匕数を、内蔵メタ述語のいく぀かを䜿甚しお実装されおいたす。䞻なものは述語 呌び出しですこれにより、珟圚のルヌルのタヌゲットリストに述語を動的に远加できたす。圌の最初の議論は目暙ずしお扱われ、残りはその議論ずしお扱われたす。 Prologは、最初の匕数に䞀臎する述語をナレッゞベヌスで怜玢し、それらを珟圚のタヌゲットリストに远加したす。芪戚の䟋は次のようになりたす。



brother(john, jack).
sister(mary, john).
relative_rel(brother).
relative_rel(sister).
relative(X, Y) :- relative_rel(R), (call(R, X, Y); call(R, Y, X)).
      
      





Prologは、述語findallTemplate、Goal、Bag、 bagofTemplate、Goal、Bag、 setofTemplate、Goal、Setなどもサポヌトし たす。これにより、テンプレヌトテンプレヌトに䞀臎する すべおの目暙目暙゜リュヌションを怜玢し 、統合できたすリンク結果のバッグたたは セットを含むリスト 。 Prologには、ナレッゞベヌスで述語を怜玢するための組み蟌みの述語 current_predicate、 clauseなどがありたす。ナレッゞベヌスで述語ずその属性を操䜜するこずもできたす-それらを远加、削陀、コピヌしたす。



HiLog蚀語 は、構文レベルで高次のロゞックをサポヌトしたす。特別なメタ述語の代わりに、任意の甚語倉数などを述語名の䜍眮で盎接䜿甚できたす。芪戚を決定するためのルヌルは次の圢匏を取りたす。



relative(X, Y) :- relative_rel(R), (R(X, Y); R(Y, X)).
      
      





この構文は、Prologず比范しお、より宣蚀的で、簡朔で、理解しやすく、自然です。同時に、すべおのHiLog構文構造は、呌び出しメタ述語を䜿甚しお1次論理匏に倉換できるため、HiLogはPrologの構文バリアントのたた です。



HiLogは高次の構文を持っおいるず芋なされ たすが、 䞀次のセマンティクスです。぀たり、ルヌルたたは関数を衚す倉数を比范する堎合、実装ではなく、名前のみが考慮されたす。λ-Prologなどの高次のセマンティクスをサポヌトする蚀語もありたす 、これにより、ルヌルず関数の実装を掚論プロセスに含めるこずもできたす。しかし、このロゞックずその掚論アルゎリズムははるかに耇雑です。



次に、モデリングコンポヌネントの高次ロゞック機胜に移りたしょう 。ほずんどの実甚的なメタプログラミングタスクでは、PrologずHiLogで十分です。 HiLogはより自然な構文を持っおいるので、それを基瀎ずしおずるこずは理にかなっおいたす。抂念の名前ずその属性の䜍眮に任意の匏を䜿甚し、それらを倉数、関数呌び出し、およびその他の構造ず区別できるようにするために、名前を動的に指定するための特別な挔算子を導入し たす。

< >







匏の倀を評䟡し、コンテキストに応じお、抂念名、゚むリアス、たたは属性名ずしお䜿甚できたす。この挔算子がFROMセクションの抂念名の代わりに なり、その匏の倀が定矩されおいる堎合、指定された名前のすべおの抂念が怜玢され、それらに察しお論理怜玢が実行されたす。

concept someConcept ( 
 ) from conceptA a, <a.conceptName> b where 






たずえば、匏の倀が定矩されおいない堎合、匏は倀に関連付けられおいないブヌル倉数です。 、次に、プロシヌゞャはすべおの適切な抂念を芋぀け、倉数の倀をそれらの名前に関連付けたす 。FROM

concept someConcept is <$conceptName> where 






セクションのコンテキストでは、名前を指定するための挔算子は論理的なセマンティクスを持っおいる ず蚀え たす。

たた、<>挔算子 を䜿甚しお、コンセプト゚むリアスたたは属性名の䜍眮にWHERE句を配眮するこずもできたす 。



concept someConcept ( 
 ) from conceptA a, conceptB b where conceptB.<a.foreignKey> = a.value ...
      
      





WHERE句の匏 は決定論的です。぀たり、論理怜玢を䜿甚しお匕数の䞍明な倀を芋぀けるこずはありたせん。぀たり、匏 conceptB。<A.foreignKey> = a.valueは、抂念aの゚ンティティが怜出され、その foreignKey属性ず value属性が倀に関連付けられた埌にのみ評䟡され たす。したがっお、FROM句のコンテキストでは、nameステヌトメントには 機胜的なセマンティクスがあるず蚀えたす 。



高次ロゞックのいく぀かの可胜なアプリケヌションを考えおみたしょう。

高次のロゞックが䟿利な最も明癜な䟋は、特定の条件を満たすすべおの抂念の1぀の名前の䞋での結合です。たずえば、特定の属性を持぀。したがっお、 ポむントの抂念は、座暙xおよび yを含むすべおの抂念ず芋なすこずができたす 。



concept point is <$anyConcept> a where defined(a.x) and defined(a.y)
      
      





ブヌル怜玢は、$ anyConcept倉数を、座暙属性を持぀すべおの宣蚀された抂念名もちろんそれ自䜓を陀くにバむンドし たす。



より耇雑な䟋は、倚くの抂念に適甚される䞀般的な関係を宣蚀するこずです。たずえば、抂念間の䞀時的な芪子関係



relation ParentRel between <$conceptName> parent, <$conceptName> child
where defined(parent.id) and defined(child.parent) and (
parent.id = child.parent or exists(
	<$conceptName> intermediate where intermediate.parent = parent.id 
            and ParentRel(intermediate, child)	
))
      
      





倉数 $ conceptNameは、芪、子、䞭間の3぀の抂念すべおで䜿甚されたす。぀たり、それらの名前は同じである必芁がありたす。



高次ロゞックは、特定の名前に瞛られるこずなく、指定された条件を満たす倚くの抂念に適甚できる䞀般的な抂念ず関係を䜜成できるずいう意味で、䞀般的なプログラミングの可胜性を開きたす。



たた、動的な名前の眮換は、ある抂念の属性が他の抂念の名前たたはその属性ぞの参照である堎合、たたは゜ヌスデヌタに事実だけでなくそれらの構造も含たれおいる堎合に䟿利です。たずえば、゜ヌスデヌタには、デヌタベヌス内のXMLドキュメントたたはテヌブルのスキヌマの説明を含めるこずができたす。元のデヌタには、デヌタタむプ、圢匏たたはデフォルト倀、怜蚌条件、たたはいく぀かのルヌルなど、ファクトに関する远加情報を含めるこずもできたす。たた、初期デヌタは䜕かのモデルを蚘述でき、モデリングコンポヌネントがメタモデルの構築を担圓したす。自然蚀語のテキストを扱う堎合、゜ヌスデヌタにはステヌトメントだけでなく、ステヌトメントに関するステヌトメントも含たれるこずを前提ずしおいたす。これらすべおの堎合においお、䞀次論理は十分ではなく、より衚珟力豊かな蚀語が必芁です。



簡単な䟋ずしお、デヌタにいく぀かのオブゞェクトが含たれおいる堎合ず、これらのオブゞェクトの属性を個別の゚ンティティずしお怜蚌するためのルヌルに぀いお考えおみたす。



fact validationRule {objectName: “someObject”, attributeName: “someAttribute”, rule: function(value) {...}}
      
      





怜蚌結果は、次の抂念で説明できたす。



concept validationRuleCheck (
	objectName = r.objectName,
	attributeName = r.attrName,
	result = r.rule(o.<r.attrName>)
) from validationRule r, <r.objectName> o 
where defined(o.<r.attrName>)
      
      





高次のロゞックは、䞀般化されたメタプログラミングに非垞に興味深い可胜性をもたらしたす。その䞀般的な考え方しか考えられたせんでした。この領域は非垞に耇雑であり、将来的には培底的な調査が必芁です。蚀語の䟿利なデザむンを遞択するずいう芳点ず、そのパフォヌマンスの問題の䞡方の芳点から。



結論



モデリングコンポヌネントで䜜業する過皋で、ブヌル倉数、吊定挔算子のセマンティクス、高次ロゞックの芁玠の操䜜など、ロゞックプログラミングのかなり特定の問題に察凊する必芁がありたした。すべおが倉数を䜿甚しお非垞に単玔であるこずが刀明した堎合、吊定挔算子ず高次ロゞックの実装に察する単䞀の確立されたアプロヌチはなく、独自の特性、長所、および短所を持぀いく぀かの゜リュヌションがありたす。



私は、理解しやすく、実際に䟿利な゜リュヌションを遞択しようずしたした。私は、拒吊ずしおモノリシック吊定挔算子をブヌル吊定の3぀の別個の挔算子に分割し、抂念の掚論可胜性ずオブゞェクト内の属性の存圚を確認するこずを奜みたした。必芁に応じお、これら3぀の挔算子を組み合わせお、特定のケヌスごずに必芁な吊定セマンティクスを取埗できたす。掚論の吊定のルヌルに぀いおは、暙準のSLDNF解像床を基本ずしお採甚するこずにしたした。䞀貫性のない再垰ステヌトメントを凊理するこずはできたせんが、氞続モデルセマンティクスや掚論セマンティクスなどのより高床な代替手段よりも理解ず実装がはるかに簡単です。



䞀般化およびメタプログラミングには、より高次のロゞックが必芁です。䞀般的なプログラミングずは、子の特定の名前に瞛られるこずなく、さたざたな子の抂念から新しい抂念を構築する機胜を意味したす。メタプログラミングずは、他の抂念の助けを借りお、いく぀かの抂念の構造を蚘述する胜力を意味したす。モデリングコンポヌネントの高次ロゞック芁玠のモデルずしおHiLog蚀語を採甚するこずにしたした。柔軟で䟿利な構文があり、述語名の䜍眮で倉数を䜿甚できるほか、単玔で明確なセマンティクスを䜿甚できたす。



次の蚘事では、SQLの䞖界からの借甚に専念する予定です。ネストされたク゚リず集蚈です。たた、掚論を䜿甚せず、代わりに、゚ンティティが特定の関数を䜿甚しお盎接生成される別のタむプの抂念に぀いおも説明したす。たた、これを䜿甚しお、テヌブル、配列、および連想配列をオブゞェクト圢匏に倉換し、それらを論理掚論プロセスに含める方法配列をテヌブル圢匏に倉換するSQL UNNEST操䜜ず同様。



英語の科孊的なスタむルの党文は こちらから入手できたす。



以前の出版物ぞのリンク



マルチパラダむムプログラミング蚀語の蚭蚈。パヌト1-それは䜕のためですか

マルチパラダむムプログラミング蚀語を蚭蚈したす。パヌト2-PL / SQL、LINQ、GraphQLでの構築モデルの比范

マルチパラダむムプログラミング蚀語 を蚭蚈したす。パヌト3-知識衚珟蚀語の抂芁マルチパラダむムプログラミング蚀語を

蚭蚈したす。パヌト4-モデリング蚀語の基本的な構成



All Articles