Я пытался выполнить следующее, если у меня есть два списка, L1 и L2, я хотел, чтобы результат (R) был «вычитанием» L2 из L1.
Пример:
L1 = [1,2,3]
L2 = [2,3,4,5]
R = [1]
Я был в состоянии сделать это, но я не могу сказать, в чем разница между _
и [_]
.
Если я сделаю это:
diferencia([],_,[]).
diferencia([X|Tail],L2,R):-
member(X,L2),
diferencia(Tail,L2,R).
diferencia([X|Tail],L2,[X|R]):-
not(member(X,L2)),
diferencia(Tail,L2,R).
Это работает, если я делаю это, это дает мне ложь:
diferencia([],[_],[]).
diferencia([X|Tail],L2,R):-
member(X,L2),
diferencia(Tail,L2,R).
diferencia([X|Tail],L2,[X|R]):-
not(member(X,L2)),
diferencia(Tail,L2,R).
Я бы предположил, что список, содержащий все, что [_]
должно работать, поскольку L2 всегда будет списком.