我試圖完成以下操作,如果我有兩個列表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