你好,我在prolog中有一个列表列表,我想要展平它们。我做了一个preidacate,按照我的意愿压扁列表,但我有这个案例:
[[2,2,3],[3,2]]
会像这样被夷为平地:[2,2,3,0,3,2]
即,如果上一个列表的最后一个元素与下一个列表的第一个元素相同,我想在新列表中添加0。你能救我吗?
这是我到目前为止的工作:
myflat([],[]) :- !.
myflat([H|T],Z) :- myflat(H,K), myflat(T,L), append(K,L,Z),!.
myflat(H,[H]) :- not(H = [K]).
但我想不出如何检查上述元素的相等性
答案 0 :(得分:0)
不完美但有效:
myflat([[A,B|List]|ListOfLists], [A|Output]) :-
myflat([[B|List]|ListOfLists], Output).
myflat([[A],[A|List]|ListOfLists], [A,0|Output]) :-
myflat([[A|List]|ListOfLists], Output).
myflat([[A],[B|List]|ListOfLists], [A|Output]) :-
A =\= B,
myflat([[B|List]|ListOfLists], Output).
myflat([[A]], [A]).
示例输入/输出:
?- myflat([[1,2,1],[1,2],[2,1]], X).
X = [1, 2, 1, 0, 1, 2, 0, 2, 1] .
?- myflat([[2,2,3],[3,2]],X).
X = [2, 2, 3, 0, 3, 2] ;
false.