Как новичок в Prolog, я пытаюсь определить предикат filter_min/2
, который принимает два списка, чтобы определить, совпадает ли второй список с первым, но со всеми вхождениями минимального числа.
Примеры запросов с ожидаемыми результатами:
?- filter_min([3,2,7,8], N).
N = [3,7,8].
?- filter_min([3,2,7,8], [3,7,8]).
true.
Я пробовал, но всегда получаю тот же результат: false
. Я не знаю, в чем проблема. Мне нужна помощь!
Вот мой код:
filter_min(X,Y) :-
X == [],
write("ERROR: List parameter is empty!"),
!;
min_list(X,Z),
filter(X,Y,Z).
filter([],[],0).
filter([H1|T1],[H2|T2],Z) :-
\+ number(H1),
write("ERROR: List parameter contains a non-number element"),
!;
H1 \= Z -> H2 is H1, filter(T1,T2,Z);
filter(T1,T2,Z).