ã¢ããªã³ã°ã³ã³ããŒãã³ãã¯ããªã³ãããžãŒã®åœ¢åŒã§ãã¡ã€ã³ã¢ãã«ã宣èšçã«èšè¿°ããããšãç®çãšããŠããŸããããã¯ãããŒã¿ã€ã³ã¹ã¿ã³ã¹ïŒãã¡ã¯ãïŒã®ãããã¯ãŒã¯ãšãé¢ä¿ãéããŠçžäºæ¥ç¶ãããæœè±¡çãªæŠå¿µã§ããããã¯ããã¬ãŒã ããžãã¯ïŒç¥è衚çŸãžã®ãªããžã§ã¯ãæåã¢ãããŒããš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-ç¥è衚çŸèšèªã®æŠèŠ