で別のリストにあるリストでリストを比較します。 (のwriteln文でデバッグした後に見られるような) は、私は二つのリストを持っているプロローグ
?- common([[a,b,c], [e,b,d], [f,g,a]], [a,e], Outlist).
false.
メインリスト
は、リスト内のリストのまま:common([],L).
common([H|T], L, Out):-
intersection(H,L,Out), common(T, L, Out),
length(Out,Len).
しかし、それは動作していない:私は次のコードをしようとしています
L is:
[a,e]
H|T is:
[[f,g,a]]
Outlist = [] .
問題はどこにありますか?これをどのように修正できますか?
私はデバッグにコードを編集し、何とかそれが仕事を始めたことがわかった:
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.
? – dasblinkenlight
共通アイテムなので、交差点に出なければならないので、[a]を表示することを期待します。 – rnso
'[[f、g、a]]'は '[f、g、a]'という1つの要素のリストです。 '[a、e]'は2つの要素のリストで、 'a'と' e'です。明らかに、 '{f、g、a]'は 'a'または' e'と同じではないので、これらの2つのリストに共通の要素はありません。したがって、 'intersection([a、e]、[[f、g、a]]、R)'は 'R = []'となります。ですから元の問題は、あなたがフラットリストと交差している*リストのリストがあることです。 '[[f、g、a]]'は一つの要素のリストです。 '[f、g、a]'は3つの要素のリストです。 – lurker