以下针对 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。