如何組合列表中的所有列表元素?結合列表中的所有元素
例如
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).
如何組合列表中的所有列表元素?結合列表中的所有元素
例如
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).
遞歸。
首先定義您的基本案例 - 如果您沒有列表要組合,您有一個空的列表。
combine([],[]).
,如果你有一個單一的元素,你有一個單獨列表
combine(X,[X]).
然後我們定義一般情況下 - 一個非空列表
combine([X|Xs], Y) :-
首先我們要遞歸壓平頭部
combine(X,XX),
然後尾部
combine(XS,XXs),
然後我們把這些結合在一起
append(XX,XXs,Y).
我們必須認真思考如何把這個一起。單例元素的基本情況想要最後出現。當匹配規則Prolog將匹配第一個適用的情況時 - 具有單例元素的基本情況將匹配列表,所以我們在此情況下將此情況放在這種情況下停止匹配。最後給我們:
combine([],[]).
combine([X|Xs],Y) :- combine(X,XX), combine(Xs,XXs), append(XX,XXs,Y).
combine(X,[X]).
你也可以尋找靈感的SWI-Prolog的庫實現'的扁平化/ 2',這是您要執行的確切斷言:HTTP://www.swi- prolog.org/pldoc/doc/home/vnc/prolog/lib/swipl/library/lists.pl?show=src(在頁面中搜索flatten的定義) – 2013-06-06 07:59:22
這不就是內置的'flatten '是嗎? – lurker