マルチパラダむムプログラミング蚀語を蚭蚈したす。パヌト4-モデリング蚀語の基本的な構成

宣蚀的なスタむルずオブゞェクト指向の機胜的なスタむルを組み合わせたマルチパラダむムプログラミング蚀語の䜜成に぀いおの話を続けたす。これは、半構造化デヌタを操䜜し、異なる゜ヌスからのデヌタを統合するずきに䟿利です。最埌に、既存のマルチパラダむムテクノロゞヌず知識衚珟の蚀語の玹介ずレビュヌの埌、ドメむンモデルの蚘述を担圓するハむブリッド蚀語のその郚分の蚘述に到達したした。私はそれをモデリングコンポヌネントず名付けたした。



モデリングコンポヌネントは、オントロゞヌの圢匏でドメむンモデルを宣蚀的に蚘述するこずを目的ずしおいたす。これは、デヌタむンスタンスファクトのネットワヌクず、関係を通じお盞互接続された抜象的な抂念です。これは、フレヌムロゞック知識衚珟ぞのオブゞェクト指向アプロヌチず1次ロゞックのハむブリッドに基づいおいたす。その䞻な芁玠は、䞀連の属性を䜿甚しおモデル化されたオブゞェクトを蚘述する抂念です。抂念は他の抂念たたは事実に基づいお構築され、最初の抂念は芪、掟生、子ず呌ばれたす..。関係は、子ず芪の抂念の属性の倀をバむンドするか、それらの可胜な倀を制限したす。抂念の定矩に関係を含めお、可胜であれば、それに関するすべおの情報が1か所にたずめられるようにするこずにしたした。抂念定矩の構文スタむルはSQLに䌌おいたす。属性、芪抂念、およびそれらの間の関係は、異なるセクションに分割する必芁がありたす。



この投皿では、抂念を定矩する䞻な方法を玹介したいず思いたす。



たず、芪の抂念を倉換するこずによっお構築される抂念。

第二に、オブゞェクト指向のスタむルは継承を意味したす。぀たり、芪の抂念の属性ず関係を継承し、それらを拡匵たたは瞮小するこずによっお抂念を䜜成できるメカニズムが必芁です。



第䞉に、メカニズムは、子ず芪の抂念に分割するこずなく、ピアの抂念間の関係を定矩するのに圹立぀ず思いたす。

次に、モデリングコンポヌネントの䞻なタむプに぀いお詳しく説明したす。



事実から始めたしょう



ファクトは、ドメむンに関する特定の知識の説明を、名前付きのキヌず倀のペアのセットの圢匏で衚したす。



fact < > {
	< > : < >
	...	
}


䟋えば



fact  product {
	name: “Cabernet Sauvignon”,
	type: “red wine”,
	country: “Chile”
}


ファクト名は䞀意ではない堎合がありたす。たずえば、名前、タむプ、原産囜が異なる補品が倚数存圚する堎合がありたす。それらの名前ずそれらの属性の名前ず倀が䞀臎する堎合、事実は同䞀であるず芋なされたす。



モデリングコンポヌネントのファクトずPrologのファクトの間に類䌌性を匕き出すこずができたす。構文のみが異なりたす。Prologでは、ファクト匕数はその䜍眮によっお識別され、モデリングコンポヌネントのファクトの属性は名前によっお識別されたす。



コンセプト



抂念は、抜象的な゚ンティティを説明する構造であり、他の抂念や事実に基づいおいたす。抂念の定矩には、名前、属性のリスト、および子の抂念が含たれたす。たた、その子抂念属性ず芪抂念の属性の間の䟝存関係を蚘述する論理匏により、子抂念の属性の倀を掚枬できたす。



concept < > < > (
		< > = <>,
		...	
) 
from 
	<  > <  > (
		< > = <> 
	   	...
	 ),
            

where < >


収益ずコストに基づいお利益を 定矩する䟋



concept profit p (
	value = r.value – c.value,
	date
) from revenue r, cost c
where p.date = r.date = c.date


抂念の定矩はSQLク゚リず圢匏が䌌おいたすが、テヌブル名の代わりに芪抂念の名前を指定する必芁があり、返される列の代わりに子抂念の属性を指定する必芁がありたす。さらに、コンセプトには、他のコンセプトの定矩やモデルク゚リで参照できる名前がありたす。芪の抂念は、抂念自䜓たたは事実のいずれかです。where句の関係匏は、論理挔算子、等匏条件、算術挔算子、関数呌び出しなどを含むこずができるブヌル匏です。それらの匕数は、倉数、定数、および芪ず子の䞡方の抂念の属性ぞの参照にするこずができたす。属性参照の圢匏は次のずおりです。



< >.< >


フレヌムロゞックず比范しお、抂念の定矩では、その構造属性は他の抂念ずの関係芪抂念および関係の衚珟ず組み合わされたす。私の芋解では、これにより、抂念に関するすべおの情報が1぀の堎所に収集されるため、コヌドをより理解しやすくするこずができたす。たた、抂念の実装の詳现がその定矩内に隠されおいるずいう意味で、カプセル化の原則にも準拠しおいたす。比范のために、フレヌムロゞックの蚀語での小さな䟋が以前の出版物にありたす。



関係の衚珟は結合圢匏論理挔算「AND」で接続された衚珟で構成されたすを持ち、子抂念のすべおの属性の倀を決定するのに十分な等匏条件を含める必芁がありたす。さらに、芪の抂念の意味を制限したり、それらを盞互に接続したりする条件を含めるこずができたす。すべおの芪抂念がwhere句で関連しおいるわけではない堎合、掚論゚ンゞンは結果ずしおそれらの倀のすべおの可胜な組み合わせを返したすSQLのFULL JOIN操䜜ず同様。



䟿宜䞊、属性が等しいための条件のいく぀かは、子ず芪の抂念の属性セクションに配眮できたす。たずえば、利益の定矩では、属性の条件倀は属性セクションに移動され、日付属性の堎合はwhereセクションに残されたす。fromセクションに転送するこずもできたす



concept profit p (
	value = r.value – c.value,
	date = r.date
) from revenue r, cost c (date = r.date)


この構文䞊の砂糖を䜿甚するず、属性間の䟝存関係をより明確にし、他の条件ず区別するこずができたす。



コンセプトはPrologのルヌルに埓いたすが、セマンティクスが少し異なりたす。Prologは、論理的に関連するステヌトメントずそれらに察する質問の䜜成に焊点を圓おおいたす。抂念は、䞻に入力デヌタを構造化し、そこから情報を抜出するこずを目的ずしおいたす。抂念属性は、プロロヌグ甚語の匕数に察応したす。ただし、Prologで匕数ずいう甚語が倉数を䜿甚しおバむンドされおいる堎合、この堎合、属性には名前で盎接アクセスできたす。



芪の抂念のリストず関係の条件は別々のセクションに分かれおいるため、掚論はPrologの掚論ずは少し異なりたす。そのアルゎリズムを䞀般的に説明したす。芪の抂念は、fromセクションで指定された順序で出力されたす。次の抂念の解決策の怜玢は、SLD解決の堎合ず同じ方法で、前の抂念の郚分的な解決策ごずに実行されたす。ただし、郚分解ごずに、where句の関係匏の有効性がチェックされたす。..。この匏は結合圢匏であるため、各郚分匏は個別にテストされたす。郚分匏がfalseの堎合、この郚分的な解決策は拒吊され、怜玢は次の解決策に進みたす。䞀郚の郚分匏匕数がただ定矩されおいない倀に関連付けられおいない堎合、その怜蚌は延期されたす。郚分匏が等匏挔算子であり、その匕数の1぀だけが定矩されおいる堎合、掚論システムはその倀を芋぀けお、残りの匕数ず関連付けようずしたす。これは、自由匕数が属性たたは倉数である堎合に可胜です。



゚ンティティ衚瀺するずきにたずえば、利益の抂念を、実䜓の収入のコンセプトずは、それに応じお、その属性の倀が最初に発芋されたす。次に、等匏p.date = r.date = c.datewhereセクションでは、日付属性やその他の抂念を倀に関連付けるこずができたす。論理怜玢がコストの抂念に到達するず、その日付属性の倀はすでにわかっおおり、怜玢ツリヌのこのブランチの入力匕数になりたす。次の出版物の1぀で、掚論アルゎリズムに぀いお詳しく説明する予定です。



Prologずの違いは、Prologルヌルではすべおが述語であり、他のルヌルや、同等性、比范などの組み蟌み述語を呌び出すこずです。たた、チェックの順序を明瀺的に指定する必芁がありたす。たずえば、最初の2぀のルヌルを実行し、次に倉数の同等性を指定する必芁がありたす。



profit(value,date) :- revenue(rValue, date), cost(cValue, date), value = rValue – cValue


この順番で実行されたす。モデリングコンポヌネントは、where句の条件のすべおの蚈算が決定論的である、぀たり、次の怜玢ブランチに再垰的に飛び蟌む必芁がないこずを前提ずしおいたす。それらの蚈算はそれらの匕数のみに䟝存するため、匕数が倀にバむンドされおいるため、任意の順序で蚈算できたす。



掚論の結果ずしお、子の抂念のすべおの属性を倀に関連付ける必芁がありたす。たた、関係の匏は真である必芁があり、未定矩の郚分匏が含たれおいおはなりたせん。子育おの抂念の導出が成功する必芁はないこずは泚目に倀したす。ネガティブ操䜜などで、元のデヌタからの芪抂念の導出の倱敗を確認する必芁がある堎合がありたす。fromセクションの芪抂念の順序によっお、決定ツリヌがトラバヌスされる順序が決たりたす。これにより、怜玢スペヌスをより匷力に制限する抂念から始めお、゜リュヌションの怜玢を最適化するこずができたす。



論理的掚論のタスクは、子の抂念の属性の可胜なすべおの眮換を芋぀けお、それらのそれぞれをオブゞェクトずしお衚すこずです。そのようなオブゞェクトは、それらの抂念名、名前、および属性倀が䞀臎する堎合、同䞀であるず芋なされたす。



同じ名前で、異なる属性のセットを含む異なる実装で、いく぀かの抂念を䜜成するこずは蚱容できるず考えられおいたす。これらは、同じ抂念の異なるバヌゞョン、1぀の名前で䟿利に組み合わせるこずができる関連抂念、異なる゜ヌスからの同䞀の抂念などです。論理的な結論ずしお、抂念の既存の定矩がすべお考慮され、それらの怜玢結果が組み合わされたす。同じ名前のいく぀かの抂念は、甚語のリストが分離圢匏甚語はOR化されおいるを持぀Prologのルヌルに類䌌しおいたす。



抂念の継承



抂念間の最も䞀般的な関係の1぀は、属皮などの階局関係です。圌らの特城は、子ず芪の抂念の構造が非垞に䌌おいるずいうこずです。したがっお、構文レベルでの継承メカニズムのサポヌトは非​​垞に重芁です。継承メカニズムがないず、プログラムは反埩的なコヌドでいっぱいになりたす。抂念のネットワヌクを構築するずきは、それらの属性ず関係の䞡方を再利甚するず䟿利です。属性のリストはそれらのいく぀かを拡匵、短瞮、たたは再定矩するのは簡単ですが、関係の倉曎を䌎う状況はより耇雑です。これらは結合圢匏の論理匏であるため、サブ匏を簡単に远加できたす。ただし、削陀たたは倉曎するず、構文が倧幅に耇雑になる可胜性がありたす。これの利点はそれほど明癜ではありたせんしたがっお、このタスクは将来のために延期したす。



次の構造を䜿甚しお、継承に基づいお抂念を宣蚀できたす。



concept < > < > is 
	<  > <  > ( 
		< > = <>, 
		...
	 ),
	...
with < > = <>, ...
without <  >, ...
where < >


is セクションには、継承された抂念のリストが含たれおいたす。それらの名前は、このセクションで盎接指定できたす。あるいは、芪の抂念の完党なリストを指定するから、セクション、およびである-継承されたすのみそれらのの別名



concept < > < > is 
	<  >,
	

from 
	<  > <  > ( 
		< > = <> 
		   ...
	 ),
            

with < > = <>, ...
without <  >, ...
where < >


セクションでは、あなたが継承された抂念の属性のリストを展開たたはそれらのいく぀か、䞊曞きするこずができずにセクションを短瞮したす- 。 継承に基づく抂念の掚論アルゎリズムは、䞊蚘の抂念の掚論アルゎリズムず同じです。唯䞀の違いは、属性のリストが芪の抂念の属性のリストに基づいお自動的に生成され、関係の衚珟が子ず芪の抂念の属性の同等性の操䜜で補足されるこずです。







継承メカニズムを䜿甚するいく぀かの䟋を考えおみたしょう。継承を䜿甚するず、既存の抂念に基づいお抂念を䜜成し、芪だけに意味があり、子の抂念には意味がない属性を取り陀くこずができたす。たずえば、゜ヌスデヌタがテヌブルの圢匏で衚瀺される堎合、特定の列のセルに独自の名前を付けるこずができたす列番号で属性を削陀したす。



concept revenue is tableCell without columnNum where columnNum = 2


いく぀かの関連する抂念を1぀の䞀般化された圢匏に倉換するこずも可胜です。䞀郚の属性を䞀般的な圢匏に倉換し、䞍足しおいる属性を远加するには、withセクションが必芁です。たずえば、゜ヌスデヌタはさたざたなバヌゞョンのドキュメントであり、そのフィヌルドのリストは時間の経過ずずもに倉化したす。



concept resume is resumeV1 with skills = 'N/A'
concept resume is resumeV2 r with skills = r.coreSkills


「再開」の抂念の最初のバヌゞョンにはスキルを持぀属性がなく、2番目のバヌゞョンには別の名前が付いおいたずしたしょう。



倚くの堎合、属性のリストを拡匵する必芁がありたす。䞀般的なタスクは、属性の圢匏の倉曎、既存の属性たたは倖郚デヌタに機胜的に䟝存する属性の远加などです。䟋えば



concept price is basicPrice with valueUSD = valueEUR * getCurrentRate('USD', 'EUR')


構造を倉曎せずに、耇数の抂念を1぀の名前で簡単に組み合わせるこずができたす。たずえば、それらが同じ属であるこずを瀺すには、次のようにしたす。



concept webPageElement is webPageLink
concept webPageElement is webPageInput


たたは、゚ンティティの䞀郚を陀倖しお、コンセプトのサブセットを䜜成したす。



concept exceptionalPerformer is employee where performanceEvaluationScore > 0.95


子コンセプトがすべおの芪コンセプトの属性を継承する耇数の継承も可胜です。同䞀の属性名がある堎合は、リストの巊偎にある芪の抂念が優先されたす。セクションで目的の属性を明瀺的にオヌバヌラむドするこずにより、この競合を手動で解決するこずもできたすwith。たずえば、この皮の継承は、1぀の「フラット」構造にいく぀かの関連する抂念を収集する必芁がある堎合に䟿利です。



concept employeeInfo is employee e, department d where e.departmentId = d.id 


抂念の構造を倉曎せずに継承するず、オブゞェクトのIDの怜蚌が耇雑になりたす。䟋ずしお、exceptionalPerformerの定矩を考えおみたしょう。芪employeeず子exceptionPerformerの抂念に関するク゚リは、同じ埓業員゚ンティティを返したす。それを衚すオブゞェクトは、意味が同じになりたす。それらは、ク゚リが行われたコンセプトに応じお、異なるコンセプト名に察しお共通のデヌタ゜ヌス、同じリストおよび属性倀を持ちたす。したがっお、オブゞェクト等匏操䜜では、この機胜を考慮に入れる必芁がありたす。抂念名は、構造を倉曎せずに䞀臎するか、䞀時的な継承関係によっおリンクされおいる堎合、等しいず芋なされたす。



継承は、class-subclass、private-common、set-subsetなどの抂念間の関係を明瀺的に衚珟するための䟿利なメカニズムです。たた、抂念定矩内の重耇コヌドを取り陀き、コヌドをより理解しやすくしたす。継承メカニズムは、属性の远加/削陀、1぀の名前での耇数の抂念の組み合わせ、およびフィルタリング条件の远加に基づいおいたす。特別なセマンティクスは組み蟌たれおいたせん。誰もが奜きなように認識しお適甚できたす。たずえば、resume、price、webPageElementの抂念を持぀䟋のように、特定の階局から䞀般的な階局を構築したす。たたは、逆に、収益ずexceptionPerformerの抂念を持぀䟋のように、䞀般的なものから具䜓的なものぞ..。これにより、デヌタ゜ヌスの詳现に柔軟に適応できたす。



関係を説明するための抂念



コヌドを理解し、モデリングコンポヌネントずOOPモデルの統合を容易にするために、子の抂念ず芪の関係をその定矩に組み蟌む必芁があるこずが決定されたした。したがっお、これらの関係は、芪の抂念から子の抂念を取埗する方法を定矩したす。ドメむンモデルがレむダヌに組み蟌たれおいお、新しいレむダヌがそれぞれ前のレむダヌに基づいおいる堎合、これは正圓化されたす。ただし、堎合によっおは、抂念間の関係を個別に宣蚀する必芁があり、いずれかの抂念の定矩に含めないでください。これは、䞀般的な甚語で定矩し、さたざたな抂念、たずえば芪子関係に適甚したい普遍的な関係にするこずができたす。たたは、2぀の抂念を接続する関係を䞡方の抂念の定矩に含める必芁がありたす。これにより、最初の抂念の本質ず2番目の抂念の既知の属性の䞡方を芋぀けるこずができ、その逆も可胜です。次に、コヌドの重耇を避けるために、リレヌションを個別に蚭定するず䟿利です。



関係の定矩では、関係に含たれる抂念をリストし、それらを盞互に接続する論理匏を蚭定する必芁がありたす。



relation < > 
between <  > <  > (
	< > = <>,
 	 ...	
),
...
where < >


たずえば、ネストされた長方圢を蚘述する関係は、次のように定矩できたす。



relation insideSquareRelation between square inner, square outer 
where inner.xLeft > outer.xLeft and inner.xRight < outer.xRight 
and inner.yBottom > outer.yBottom and inner.yUp < outer.yUp


実際、このような関係は䞀般的な抂念であり、その属性はネストされた抂念の本質です。



concept insideSquare (
	inner = i
	outer = o												
) from square i, square o
where i.xLeft > o.xLeft and i.xRight < o.xRight 
and i.yBottom > o.yBottom and i.yUp < o.yUp


この関係は、他の芪抂念ずずもに抂念定矩で䜿甚できたす。関係に含たれる抂念は、倖郚からアクセス可胜であり、その属性の圹割を果たしたす。属性名は、ネストされたコンセプト゚むリアスず䞀臎したす。次の䟋では、HTMLフォヌムにHTMLペヌゞのフォヌム内にあるHTML芁玠が含たれおいるこずを瀺しおいたす。



oncept htmlFormElement is e 
from htmlForm f, insideSquareRelation(inner = e, outer = f), htmlElement e


解決策を怜玢するずき、htmlFormコンセプトのすべおの倀が最初に怜玢され、次にそれらはリレヌションinsideSquareの倖偎のネストされたコンセプトに関連付けられ、その内郚属性の倀が怜玢されたす。最埌に、htmlElementの抂念に関連する内郚倀がフィルタリングされたす。 リレヌションには機胜的なセマンティクスを指定するこずもできたす。これをブヌル型の関数ずしお䜿甚しお、ネストされた抂念の特定の゚ンティティに察しおリレヌションが満たされおいるかどうかを確認できたす。







oncept htmlFormElement is e 
from htmlElement e, htmlForm f
where  insideSquareRelation(e, f)


前の堎合ずは異なり、ここでは関係は関数ずしお扱われ、掚論の順序に圱響したす。関数の評䟡は、すべおの匕数が倀に関連付けられるたで延期されたす。すなわち、たず抂念の倀の組み合わせでのHtmlElementずhtmlForm芋出される぀いで、および関係に察応しないものinsideSquareRelation陀倖されるであろう。次の出版物の1぀で、論理的および機胜的なプログラミングパラダむムの統合に぀いおさらに詳しく説明する予定です。



それでは、小さな䟋を芋おみたしょう。



事実の定矩ず基本的なタむプの抂念は、最初の出版物からの債務者による䟋を実装するのに十分です。顧客に関する情報顧客ID、名前、電子メヌルず請求曞アカりントID、顧客ID、日付、支払額、支払額を栌玍する2぀のCSVファむルがあるずしたす。



たた、これらのファむルの内容を読み取り、それらを䞀連のファクトに倉換する特定の手順がありたす。



fact cell {
	table: “TableClients”,
	value: 1,
	rowNum: 1,
	columnNum: 1
};
fact cell {
	table: “TableClients”,
	value: “John”,
	rowNum: 1,
	columnNum: 2
};
fact cell {
	table: “TableClients”,
	value: “john@somewhere.net”,
	rowNum: 1,
	columnNum: 3
};


fact cell {
	table: “TableBills”,
	value: 1,
	rowNum: 1,
	columnNum: 1
};
fact cell {
	table: “TableBills”,
	value: 1,
	rowNum: 1,
	columnNum: 2
};
fact cell {
	table: “TableBills”,
	value: 2020-01-01,
	rowNum: 1,
	columnNum: 3
};
fact cell {
	table: “TableBills”,
	value: 100,
	rowNum: 1,
	columnNum: 4
};
fact cell {
	table: “TableBills”,
	value: 50,
	rowNum: 1,
	columnNum: 5
};


たず、テヌブルセルに意味のある名前を付けたしょう。



concept clientId is cell where table = “TableClients” and columnNum = 1;
concept clientName is cell where table = “TableClients” and columnNum = 2;
concept clientEmail is cell where table = “TableClients” and columnNum = 3;
concept billId is cell where table = “TableBills” and columnNum = 1;
concept billClientId is cell where table = “TableBills” and columnNum = 2;
concept billDate is cell where table = “TableBills” and columnNum = 3;
concept billAmountToPay is cell where table = “TableBills” and columnNum = 4;
concept billAmountPaid is cell where table = “TableBills” and columnNum = 5;


これで、1぀の行のセルを1぀のオブゞェクトに結合できたす。



concept client (
	id = id.value,
	name = name.value,
	email = email.value
) from clientId id, clientName name, clientEmail email
where id.rowNum = name.rowNum = email.rowNum;


concept bill (
	id = id.value,
	clientId = clientId.value,
	date = date.value,
	amountToPay = toPay.value,
	amountPaid = paid.value
) from billId id, billClientId clientId, billDate date, billAmountToPay  toPay,  billAmountPaid  paid
where id.rowNum = clientId.rowNum = date.rowNum = toPay.rowNum = paid.rowNum;


「未払いの請求曞」ず「債務者」の抂念を玹介したしょう。



concept unpaidBill is bill where amountToPay >  amountPaid;
concept debtor is client c where exist(unpaidBill {clientId: c.id});


どちらの定矩も継承を䜿甚したす。unpaidBillずいう抂念は、請求曞、債務者、぀たりクラむアントの抂念のサブセットです。債務者の定矩には、unpaidBillコンセプトのサブク゚リが含たれおいたす。ネストされたク゚リのメカニズムに぀いおは、次のいずれかの出版物で詳しく怜蚎したす。



「フラット」抂念の䟋ずしお、「顧客債務」の抂念も定矩したしょう。ここでは、「顧客」ず「アカりント」の抂念のいく぀かのフィヌルドを組み合わせたす。



concept clientDebt (
	clientName = c.name,
	billDate = b.date,
	debt = b. amountToPay – b.amountPaid
) from unpaidBill b, client c(id = b.client); 


コンセプトクラむアントず請求曞の属性間の䟝存関係はfromセクションに移動され、子コンセプトclientDebtの䟝存関係はその属性のセクションに移動されたす。必芁に応じお、それらをすべおwhereセクションに配眮できたす。結果は同じになりたす。しかし、私の芳点からは、珟圚のバヌゞョンはより簡朔であり、これらの䟝存関係の目的、぀たり抂念間の関係を定矩するこずをより匷調しおいたす。



次に、少なくずも3぀の未払いの請求曞が連続しおいる悪意のある䞍履行者の抂念を定矩しおみたしょう。これを行うには、1人の顧客の請求曞を日付で泚文できる関係が必芁です。䞀般的な定矩は次のようになりたす。



relation billsOrder between bill next, bill prev
where next.date > prev.date and next.clientId = prev.clientId and not exist(
    bill inBetween 
    where  next.clientId = inBetween.clientId 
    and  next.date > inBetween.date  > prev.date
);


2぀の請求曞が同じ顧客に属し、䞀方の日付がもう䞀方の日付よりも倧きく、それらの間に他の請求曞がない堎合、2぀の請求曞が連続しお衚瀺されたす。この段階では、そのような定矩の蚈算の耇雑さにこだわる぀もりはありたせん。ただし、たずえば、すべおの請求曞が1か月の間隔で発行されるこずがわかっおいる堎合は、倧幅に簡略化できたす。



relation billsOrder between bill next, bill prev
where next.date = prev.date + 1 month and next.clientId = prev.clientId;


3぀の未払いの請求曞のシヌケンスは次のようになりたす。



concept unpaidBillsSequence (clientId = b1.clientId, bill1 = b1, bill2 = b2, bill3 = b3) 
from 
    unpaidBill b1, 
    billsOrder next1 (next = b1, prev = b2)
    unpaidBill b2
    billsOrder next2 (next = b2, prev = b3)
    unpaidBill b3;


この抂念では、最初にすべおの未払いの請求曞が怜玢され、次にnext1リレヌションを䜿甚しおそれぞれの次の請求曞が怜玢されたす。抂念b2を䜿甚するず、この請求曞が未払いであるこずを確認できたす。同じ原則で、next2ずb3を䜿甚するず、3番目の未払いの請求曞が連続しお芋぀かりたす。この抂念ず顧客の抂念ずの接続をさらに容易にするために、顧客IDが属性のリストに個別に远加されたした。



concept hardCoreDefaulter is client c where exist(unpaidBillsSequence{clientId: c.id});


債務者の䟋は、ドメむンモデルを宣蚀的なスタむルで完党に蚘述する方法を瀺しおいたす。OOPたたは機胜スタむルでのこの䟋の実装ず比范するず、結果のコヌドは非垞に簡朔で理解しやすく、自然な蚀語で問題を説明するのに近いものです。



簡単な結論。



そこで、ハむブリッド蚀語モデリングコンポヌネントの3぀の䞻芁な抂念を提案したした。



  • 他の抂念の倉換に基づいお䜜成された抂念。
  • 他の抂念の構造ず関係を継承する抂念。
  • 他の抂念間の関係を定矩する抂念。


これらの3぀のタむプの抂念には異なる圢匏ず目的がありたすが、解決策を芋぀ける内郚ロゞックは同じであり、属性のリストを圢成する方法のみが異なりたす。



抂念の定矩は、圢匏ず実行の内郚ロゞックの䞡方でSQLク゚リに䌌おいたす。したがっお、提案された蚀語が開発者にずっお理解可胜であり、゚ントリのしきい倀が比范的䜎いこずを願っおいたす。たた、他の抂念の定矩での抂念の䜿甚、継承、掟生関係、再垰的定矩などの远加機胜により、SQLを超えお、コヌドの構造化ず再利甚が容易になりたす。



RDFやOWLずは異なり、モデリングコンポヌネントは抂念ず関係を区別したせん。すべおが抂念です。フレヌムロゞックの蚀語ずは察照的に、抂念の構造を説明するフレヌム、およびそれらの間の接続を定矩するルヌルは、䞀緒に組み合わされたす。 Prologなどの埓来の論理プログラミング蚀語ずは察照的に、モデルの䞻な芁玠は、フラットな構造を持぀ルヌルではなく、オブゞェクト指向の構造を持぀抂念です。この蚀語蚭蚈は、倧芏暡なオントロゞヌや䞀連のルヌルを䜜成するのにそれほど䟿利ではないかもしれたせんが、半構造化デヌタを操䜜したり、異皮のデヌタ゜ヌスを統合したりする堎合にははるかに優れおいたす。モデリングコンポヌネントの抂念は、OOPモデルのクラスに近いため、アプリケヌションコヌドにモデルの宣蚀的な説明を含めるタスクが容易になりたす。



モデリングコンポヌネントの説明はただ完了しおいたせん。次の蚘事では、ブヌル倉数、吊定、高次ロゞックの芁玠など、コンピュヌタヌロゞックの䞖界からの問題に぀いお説明する予定です。その埌、特定の関数を䜿甚しお゚ンティティを生成する抂念、集蚈、および抂念のネストされた定矩。



英語の科孊的なスタむルの党文は、papers.ssrn.com / sol3 / papers.cfmabstract_id = 3555711で入手できたす。



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



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

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

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



All Articles