【发布时间】: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