【问题标题】:I need to create a Datalog Query based off two Tables?我需要基于两个表创建数据日志查询吗?
【发布时间】:2017-01-08 21:28:58
【问题描述】:

以下针对 none_of_manufacturer 的 Datalog 规则旨在 列出航空公司没有飞机的飞机制造商 它的舰队。然而,下面的 Datalog 片段并没有做到这一点 打算这样做。

none_of_manufacturer(Man) :- aircraft_type(Model, Man, _), ¬ model_in_fleet(模型)。 model_in_fleet(模型):- 飞机(_,模型,_)。

我可以对上述查询做些什么来修复它?

我想到了一个建议:

none_of_manufacturer(Man) :- aircraft_type(Model, Man, _), ¬ model_in_fleet(模型,人)。 model_in_fleet(模型,人):-飞机(_,模型,_),飞机类型(_,人,_)。

你们怎么看?我附上了下表

飞机 -------------------------- |注册 |型号 |英里 | |---------------------------------------| |G-CWQS |737-400C | 2945321 | |G-FDWC |737-400 | 506834 | |G-FXDC |737-400 | 34760 | |G-KLSD |737-400 | 590 | |G-UGHJ |380 | 4544 | ----------------------------------------- 飞机类型 ------------------------------------- |型号|制造商| no_engines | --------------------------------------| |727 |波音 | 3 | |737-200 |波音 | 2 | |737-400 |波音 | 2 | |737-400C|波音 | 2 | |737-500 |波音 | 2 | |380 |空客 | 4 | |747 |波音 | 4 | |MD11 |医学博士 | 3 | --------------------------------------

更新

我发现了一种可以解决问题的技术。考虑到原始查询返回了不在飞机表中的模型的制造,在这种情况下,对于以下丢失的飞机 (727,737-200,737,500) 和 MD (MD11) 将是 Boing。我们的最终结果是 MD,因为我们没有 MD 平面,所以

Existing_manufacturer(Man):-aircraft_type(Model,Man,-),aircraft(_,Model,)。 返回现有飞机波音和空客的制造商。 现在,如果我们要使用原始查询中的前一个查询 none_of_manufacturer(Man) :- aircraft_type(_ ,Man, _), ¬ Existing_manufacturer(人)。 将计算差异并仅返回 MD。

【问题讨论】:

  • 您的期望是什么?阅读您的规则,我希望 none_of_manufacturer(Man) 的值是 {Boeing, Airbus, MD}。
  • 基本上它的目的是返回没有平原的制造商,所以只是 MD。

标签: datalog


【解决方案1】:

您已经解决了自己的问题,但要准确解释为什么您的原始查询不起作用:

none_of_manufacturer(Man) :-
   aircraft_type(Model, Man, _),
   !model_in_fleet(Model).

谓词将包含存在 some 模型但不在舰队中的每个人。

有趣的是,只有 Model 变量的存在会导致这种混乱。为了避免这种情况,我总是喜欢非常明确地建模,这样你的逻辑显然是正确的。

您在上面以更简单的形式编写的规则是:

missing(Man) :-
   manufacturer(Man),
   !manufacturer_in_fleet(Man).

现在如何计算这些?

model_in_fleet(Model) :-
   aircraft(_, Model, _).

manufacturer_in_fleet(Man) :-
   aircraft_type(Model, Man, _),
   model_in_fleet(Model).

manufacturer(Man) :-
   aircraft_type(_, Man, _).

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 2016-09-13
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多