1

リスト内のリストからすべてのリスト要素を結合するにはどうすればよいですか?

combine([[a,b,c],[d,[e,f],g],h],X).
return X = [a,b,c,d,e,f,g,h]

これは私が試したものです

flat([], []).
flat([First|Rest], _X):-
    flat(Rest, First).
4

1 に答える 1

0

再帰的に。

最初に基本ケースを定義します。組み合わせるリストがない場合は、空のリストになります。

combine([],[]).

単一の要素がある場合は、シングルトンリストがあります

combine(X,[X]).

次に、一般的なケースを定義します-空でないリスト

combine([X|Xs], Y) :-

まず、頭を再帰的に平らにしたい

combine(X,XX),

それから尻尾

combine(XS,XXs),

次に、これらをまとめます

append(XX,XXs,Y).

これをどのように組み合わせるかを慎重に検討する必要があります。singleton 要素の基本ケースは最後に表示されます。ルールに一致する場合、Prolog は最初に適用されるものに一致します。シングルトン要素を含む基本ケースはリストに一致するため、このケースの後にこれを配置して、この場合の一致を停止します。最後に次のことを示します。

combine([],[]).
combine([X|Xs],Y) :- combine(X,XX), combine(Xs,XXs), append(XX,XXs,Y).
combine(X,[X]).
于 2013-06-05T13:18:30.323 に答える