Vergleich habe ich zwei Listen:eine Liste mit Listen in einer anderen Liste in Prolog
L1 = [[a,b,c], [e,b,d], [f,g,a]]
L2 = [a,e]
Ich mag mit jeder Liste in L1 L2 vergleichen und die Anzahl der gemeinsamen Elemente finden. Ich versuche folgenden Code:
common([],L).
common([H|T], L, Out):-
intersection(H,L,Out), common(T, L, Out),
length(Out,Len).
Allerdings ist es nicht funktioniert:
?- common([[a,b,c], [e,b,d], [f,g,a]], [a,e], Outlist).
false.
Die Hauptliste bleibt Liste in der Liste (wie nach dem Debuggen mit writeln Aussagen gesehen):
L is:
[a,e]
H|T is:
[[f,g,a]]
Outlist = [] .
Wo ist das Problem und wie kann ich das korrigieren?
ich den Code zu debuggen bearbeitet und festgestellt, dass irgendwie hat es begonnen Arbeiten:
common([],L,Out).
common([H|T], L, Out):-
writeln('------------in common--------------'),
writeln('L is:'), writeln(L),
writeln('H is:'), writeln(H),
intersection(L,H,Out2list),
writeln('Out2list is:'), writeln(Out2list),
common(T, L, Out2).
41 ?- common([[a,b,c], [e,b,d], [f,g,a]], [a,e], Outlist).
------------in common--------------
L is:
[a,e]
H is:
[a,b,c]
Out2list is:
[a]
------------in common--------------
L is:
[a,e]
H is:
[e,b,d]
Out2list is:
[e]
------------in common--------------
L is:
[a,e]
H is:
[f,g,a]
Out2list is:
[a]
true.
Welche Ausgabe erwarten Sie in der "outlist" zu erhalten? – dasblinkenlight
Ich erwarte, dass es [a] zeigt, da es ein gewöhnlicher Gegenstand ist und in einer Kreuzung herauskommen sollte. – rnso
'[[f, g, a]]' ist eine Liste von EINEM ELEMENT, welches '[f, g, a]' 'ist. '[a, e]' ist eine Liste von ZWEI ELEMENTEN, die "a" und "e" sind. Offensichtlich haben diese zwei Listen kein gemeinsames Element, da '{f, g, a]' nicht dasselbe wie entweder 'a' oder 'e' ist. Daher führt "Schnittpunkt ([a, e], [[f, g, a]], R)" zu "R = []". Ihr ursprüngliches Problem besteht also darin, dass Sie * Listen mit Listen * haben, die Sie mit flachen Listen schneiden. '[[f, g, a]]' ist eine Liste von einem Element. '[f, g, a]' ist eine Liste von 3 Elementen. – lurker