将列表元素写入序言中的csv

Write list element into csv in prolog

我必须用 csv_write_file.
写入 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)].

最后,文件只包含列表的最后一个元素 --> g h i

但我想要这样的文件:

a b c
d e f
g h i

我的实现有什么问题?谢谢。

发生这种情况的原因是因为 csv_write_file/3 每次都会 重新启动 写入 File。所以最后,它会把ghi写到文件里。

您可以将数据批量处理成 row/3 的列表,然后将它们写入文件:

<b>map_item</b>(P, row(A, B, C)) :-
    P =.. [_, _, A, B, C].

insert(T, File, Data) :-
    maplist(<b>map_item</b>, Data, <b>Rows</b>),
    csv_write_file(File, <b>Rows</b>, [separator(0'\t)]).