Я пытаюсь написать код Пролога, но я не могу заставить это возвращать true. Я пытаюсь найти список, который все элементы включены в два других списка. Например, все элементы списка A находятся в списках B и C, а не вместе. Мой Prolog код:Почему эта строка в прологе возвращает false?
member(X, [X|_]).
member(X, [_|T]) :-
member(X, T).
first([H0|T0], [H0|T1], A) :-
member(H0, A),
first(T0, [H0|T1], A).
first([H0|T0], [_|T1], A) :-
first([H0|T0], T1, A).
где член предикат возвращает истину, если элемент находится в списке. С предикатом «первым» я пытаюсь использовать предикат-член, чтобы найти соответствующий элемент из A и B в списке C. Если я найду, то перейдите далее в первый список и сравните его первый элемент со вторыми элементами списка и снова, если я буду соответствовать, я проверю, могу ли я найти его в третьем списке. Надеюсь, он это сделает, но когда я запустил
?- first([4, 6, 4], [4, 5, 6, 4], [1, 2, 4, 6]).
он дает ложные данные, и я не могу понять, почему. Это кажется простой ошибкой внимания где-то, но я просто не могу обойти его.
Вы, кажется, не хватает базового варианта для пустых списков. –