В чем разница между списком с чем угодно ([_]) и чем угодно (_)

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

6
задан Trufa 18 December 2011 в 22:20
поделиться