我试图完成以下操作,如果我有两个列表L1和L2,我希望结果(R)是L1的L2的“减法”。列表与任何东西([_])和任何东西(_)之间的区别是什么
例子:
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总会列表成为一个列表。
变量称为'_'是不是一个真正的普通变量。如果你有两个叫'_'的变量,它们不会统一,它们是两个不同的变量。 – svick 2011-12-19 00:26:48
正常变量在这里被用来暗示当涉及匹配模式时,匿名变量不能执行常规变量无法做到的事情。在上面的例子中,无论如何都显示了两个匿名变量不一定统一的事实。无论如何感谢澄清! – m09 2011-12-19 00:35:44