导入 csv 文件数据以填充 Prolog 知识库

2024-05-07

我有一个 csv 文件example.csv其中包含两列,标题为 var1 和 var2。

我想填充一个最初为空的 Prolog 知识库文件import.pl具有重复的事实,而每一行example.csv处理方式相同:

fact(A1, A2).
fact(B1, B2).
fact(C1, C2).

我如何在 SWI-Prolog 中对此进行编码?

编辑,基于@Shevliaskovic 的回答:

:- use_module(library(csv)).
import:-
    csv_read_file('example.csv', Data, [functor(fact), separator(0';)]),
    maplist(assert, Data).

When import.在控制台中运行时,我们完全按照请求的方式更新知识库(除了知识库直接在内存中更新,而不是通过文件和后续查询来更新这一事实)。

Check setof([X, Y], fact(X,Y), Z). :

Z = [['A1', 'A2'], ['B1', 'B2'], ['C1', 'C2'], [var1, var2]].

SWI Prolog 为此有一个内置流程。

It is

csv_read_file(+File, -Rows) 

或者您可以添加一些选项:

csv_read_file(+File, -Rows, +Options) 

你可以在文档 http://www.swi-prolog.org/pldoc/doc/swi/library/csv.pl。了解更多信息

这是文档中的示例:

假设我们要从 CSV 文件创建一个谓词表/6 知道每条记录包含 6 个字段。这可以使用代码来完成 以下。如果没有选项 arity(6),这将生成一个谓词 table/N,其中 N 是数据中每条记录的字段数。

?- csv_read_file(File, Rows, [functor(table), arity(6)]),
   maplist(assert, Rows).

例如:

如果您有一个如下所示的 File.csv:

A1  A2
B1  B2
C1  C2

您可以将其导入到 SWI,如下所示:

9 ?- csv_read_file('File.csv', Data).

结果将是:

Data = [row('A1', 'A2'), row('B1', 'B2'), row('C1', 'C2')].
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导入 csv 文件数据以填充 Prolog 知识库 的相关文章

随机推荐