我使用maplist(getEdgeInfo(Q_From_To),Edges,Edge_Info0)来收集图形中边缘的所有信息。 getEdgeInfo(Q_From_To)返回边的列表,每个列表的信息也作为列表返回,因此我得到以下Edge_Info0:
[ [[4,4,"n.v.t.",3,"n.v.t.",3,5,5,2]],
[[5,5,"n.v.t.",3,"n.v.t.",3,12,12,2],[5,5,"n.v.t.",3,"n.v.t.",3,12,12,1]],
[[5,5,"n.v.t.",3,"1.0",3,56,56,2]],
---
]
我需要的是以下格式的相同数据:
[ [4,4,"n.v.t.",3,"n.v.t.",3,5,5,2],
[5,5,"n.v.t.",3,"n.v.t.",3,12,12,2],
[5,5,"n.v.t.",3,"n.v.t.",3,12,12,1],
[5,5,"n.v.t.",3,"1.0",3,56,56,2],
---
]
最佳方法是什么?我应该使用DCG吗? (我对DCG没有任何经验)。
本
我结束了。希望这将适用于“真实”数据。
clean([]) --> [].
clean([Q_Set|Tail]) --> q_set(Q_Set), clean(Tail), [].
q_set([]) --> [].
q_set([Rec_Set|Tail]) --> rec_set(Rec_Set), q_set(Tail).
rec_set([]) --> [].
rec_set([Record|Tail]) --> [Record], rec_set(Tail).
?- X = [[[a]], [[b],[c]], [[d]]], phrase(clean(X), List).
List = [a, b, c, d],
X = [[[a]], [[b], [c]], [[d]]]
* /
第一次尝试将步骤扁平化得太深。以下代码给出了预期的转换:
clean([]) --> [].
clean([Rec_Set|Tail]) --> rec_set(Rec_Set), clean(Tail), [].
rec_set([]) --> [].
rec_set([Record|Tail]) --> [Record], rec_set(Tail).
flatten([], []).
flatten([[X|R]|T], FL) :-
flatten([X|R], Find), !,
append(Find, NewFL, FL),
flatten(T, NewFL).
flatten([X|T], [X|FL]):-
flatten(T, FL).