Приведенное ниже правило журнала данных для none_of_manufacturer предназначено для перечисления тех производителей самолетов, для которых авиакомпания не имеет самолетов в своем парке. Однако приведенный ниже фрагмент журнала данных не делает того, для чего он был предназначен.
none_of_manufacturer(Man) :- aircraft_type(Model, Man, _), ¬ model_in_fleet(Model). model_in_fleet(Model) :- aircraft(_, Model, _).
что я могу сделать с вышеуказанным запросом, чтобы исправить это?
Я подумал об одном предложении:
none_of_manufacturer(Man) :- aircraft_type(Model, Man, _), ¬ model_in_fleet(Model, Man). model_in_fleet(Model, Man) :- aircraft(_, Model, _), aircraft_type(_ ,Man, _).
Ребята, что вы думаете? Я прикрепил таблицы ниже
aircraft --------------------------- | reg | model | miles | |---------------------------| |G-CWQS |737-400C | 2945321 | |G-FDWC |737-400 | 506834 | |G-FXDC |737-400 | 34760 | |G-KLSD |737-400 | 590 | |G-UGHJ |380 | 4544 | -----------------------------
aircraft_type ------------------------------------- |model | manufacturer| no_engines | -------------------------------------| |727 | Boeing | 3 | |737-200 | Boeing | 2 | |737-400 | Boeing | 2 | |737-400C| Boeing | 2 | |737-500 | Boeing | 2 | |380 | Airbus | 4 | |747 | Boeing | 4 | |MD11 | MD | 3 | --------------------------------------
Обновлять
Я обнаружил метод, который может решить эту проблему. Учитывая, что исходный запрос вернул производство моделей, отсутствующих в таблице самолетов, которые в этом случае были бы Boing для следующих отсутствующих самолетов (727 737–200 737 500) и MD для (MD11). Наш конечный результат — MD, поскольку у нас нет плоскости MD, поэтому
Existing_manufacturer(Man):-aircraft_type(Model,Man,-),aircraft(_,Model,). returns the manufacturer of existing planes Boing and Airbus. Now if we were to use the previous query in the original none_of_manufacturer(Man) :- aircraft_type(_ ,Man, _), ¬ Existing_manufacturer(Man). Will calculate the difference and return only MD.