Способ, которым Prolog отвечает на запрос, не позволяет вам этого сделать. Каким бы ни был запрос, Prolog будет go просматривать список предикатов один за другим. С вашими предикатами Prolog не может узнать, является ли flag(china,white)
(например) последним, приписывающим цвет китайскому флагу, поэтому вы не можете выбрать флаги, которые не имеют специфику c color.
Способ go решить эту проблему - использовать список для хранения цветов флага:
flag(france,[red,blue,white]).
flag(china,[red,white]).
flag(india,[orange,green,white]).
Таким образом, Prolog просто go через список, чтобы узнать, есть ли основной цвет или нет.
Вот пример функции, которая делает то, что вы хотите:
no_primary_color(X,[]).
no_primary_color(X,[C|Cs]) :- not(primary(C)),no_primary_color(X,Cs).
И запрос:
?- flag(X,Y), no_primary_color(X,Y).