Stavo cercando di realizzare quanto segue, se ho due liste, L1 e L2, volevo che il risultato (R) fosse la "sottrazione" di L2 da L1.Qual è la differenza tra un elenco con qualsiasi cosa ([_]) e qualsiasi cosa (_)
Esempio:
L1 = [1,2,3]
L2 = [2,3,4,5]
R = [1]
ero in grado di raggiungere questo obiettivo, ma non posso dire che cosa è la differenza tra _
e [_]
.
Se faccio questo:
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).
Funziona, se faccio questo, mi dà falsa:
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).
Vorrei assumere una lista che contiene nulla [_]
dovrebbe funzionare dal L2 sarà sempre sii una lista.
variabile chiamata '_' in realtà non è una variabile normale. Se hai due variabili chiamate '_', non si unificheranno, sono due variabili diverse. La variabile normale – svick
è qui usata per implicare che le variabili anonime non possono fare cose che una variabile normale non può fare quando si tratta di abbinare i modelli. Il fatto che due variabili anonime non si uniscano necessariamente è stato comunque mostrato negli esempi sopra. Grazie per aver chiarito comunque! – m09