Я пытался выполнить следующее, если у меня есть два списка, 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 всегда будет список.