在prolog中将列表元素写入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

我必须用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), 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)])。