阅读Prolog后从csv文件中提取字符串

x4shl7ld  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(126)

晚上好,
我正在尝试在Prolog中读取包含世界上所有国家的csv文件。执行以下代码:

read_KB(R) :- csv_read_file("countries.csv",R).

我得到了一个Terms的列表,类型如下:

R = [row('Afghanistan;'), row('Albania;'), row('Algeria;'), row('Andorra;'), row('Angola;'), row('Antigua and Barbuda;'), row('Argentina;'), row('Armenia;'), row(...)|...].

我想只提取每个国家的名称,并将它们全部放入list of Strings中。我尝试了这种方法,只在第一行执行此操作:

read_KB(L) :- csv_read_file("/Users/dylan/Desktop/country.csv",R),
        give(R,L).

give([X|T],X).

我只得到一个row('Afghanistan;')类型的项

ar7v8xwq

ar7v8xwq1#

您可以使用maplist/3

read_KB(Names) :-
    csv_read_file('countries.csv', Rows, [separator(0';)]),
    maplist([row(Name,_), Name] >> true, Rows, Names).
vu8f3i0k

vu8f3i0k2#

@slago给出的答案可以简化,使用arg/3代替lambda表达式,使其稍微更高效:

read_KB(Names) :-
    csv_read_file('countries.csv', Rows, [separator(0';)]),
    maplist(arg(1), Rows, Names).

相关问题