在prolog中将列表元素写入csv
我必须用csv_write_文件写入csv文件。在prolog中将列表元素写入csv,csv,prolog,swi-prolog,Csv,Prolog,Swi Prolog,我必须用csv_write_文件写入csv文件。 我的实际代码是: insert(T, File, Data) :- Data = [X | Xs], X =.. [_, _, A, B, C], csv_write_file(File, [row(A, B, C)], [separator(0'\t)]), insert(T, File, Xs). 数据是如下所示的列表: [test(name, a, b, c), test(name, d, e, f), t
我的实际代码是:
insert(T, File, Data) :-
Data = [X | Xs],
X =.. [_, _, A, B, C],
csv_write_file(File, [row(A, B, C)], [separator(0'\t)]),
insert(T, File, Xs).
数据是如下所示的列表:
[test(name, a, b, c), test(name, d, e, f), test(name, g, h, i)].
最后,该文件只包含列表的最后一个元素-->gi
但我想要这样的文件:
a b c
d e f
g h i
我的实现有什么问题?谢谢。发生这种情况的原因是
csv\u write\u file/3
每次都会重新开始写入文件。因此,在最后,需要g
,h
,i
并将它们写入文件
您可以将数据批量处理到行/3
的列表中,然后将这些数据写入文件:
map_item(P, row(A, B, C)) :-
P =.. [_, _, A, B, C].
insert(T, File, Data) :-
maplist(map_item, Data, Rows),
csv_write_file(File, Rows, [separator(0'\t)]).
map_项目(P,行(A,B,C)):-
P=。。[uu,A,B,C]。
插入(T、文件、数据):-
映射列表(映射项、数据、行),
csv_write_文件(文件,行,[分隔符(0'\t)])。