Prolog 有人能帮我把这个应用到我的数据库上吗?

Prolog 有人能帮我把这个应用到我的数据库上吗?,prolog,Prolog,你的话没有多大意义。通过应用于数据库,我假设您有一系列基础事实,并且您希望这组谓词可以与它一起运行 如果是这种情况,您需要在prolog中阅读unification。正如我在评论中所描述的,很明显,USER是您的数据库用户名,PWD是用户的密码,DB是数据库名称,QUERY是您要执行的查询。QUERY是要执行的完整MySQL查询字符串。有关查询的所有信息(包括什么表、什么字段和条件)都包含在该查询字符串中。这是一个标准的MySQL查询字符串。可以理解,您提供的用户名和密码具有执行您将在query

你的话没有多大意义。通过应用于数据库,我假设您有一系列基础事实,并且您希望这组谓词可以与它一起运行


如果是这种情况,您需要在prolog中阅读unification。

正如我在评论中所描述的,很明显,
USER
是您的数据库用户名,
PWD
是用户的密码,
DB
是数据库名称,
QUERY
是您要执行的查询。
QUERY
是要执行的完整MySQL查询字符串。有关查询的所有信息(包括什么表、什么字段和条件)都包含在该查询字符串中。这是一个标准的MySQL查询字符串。可以理解,您提供的用户名和密码具有执行您将在
query
中提供的查询的适当权限

例如,假设您有一个名为
mydb
的MySQL数据库。 还假设
mydb
有一个名为
mytable
的表,如下所示:

query(USER, PWD, DB, QUERY, Columns, Rows) :-
    atom_concat('-p', PWD, PPWD),
    process_create(path(mysql), ['-u', USER, PPWD, '-D', DB, '-e', QUERY], [stdout(pipe(Out)),stderr(std)]),
    read_record(Out, Columns),
    read_records(Out, Rows).

read_record(Out, Fields) :-
    read_line_to_codes(Out, Codes),
    Codes \= end_of_file,
    atom_codes(Line, Codes),
    atomic_list_concat(Fields, '\t', Line).

read_records(Out, [Record|Rs]) :-
    read_record(Out, Record),
    !, read_records(Out, Rs).
read_records(Out, []) :-
    close(Out).

assertz(Clause).
进一步假设您的MySQL数据库
mydb
是由用户
fred
通过密码
freds=password
访问的。然后,您可以使用正在显示的Prolog代码进行以下查询:

id    foo    bar
--    ---    ---
 1    ick    poo
 2    oh     yeah
这将产生:

?- query('fred', 'freds=password', 'mydb', 'select * from mytable', Cols, Rows).
?- query('fred', 'freds=password', 'mydb', 'select id, bar from mytable limit 1', Cols, Rows).
或者你可以:

Cols = ['id', 'foo', 'bar']
Rows = [['1', 'ick', 'poo'], ['2', 'oh', 'yeah']]
这将产生:

?- query('fred', 'freds=password', 'mydb', 'select * from mytable', Cols, Rows).
?- query('fred', 'freds=password', 'mydb', 'select id, bar from mytable limit 1', Cols, Rows).

这显然是为MySQL数据库编写的。你的数据库是MySQL吗?显然,
USER
是您的数据库用户名,
PWD
是用户的密码,
db
是数据库名称,
QUERY
是您要执行的查询。为了尝试它,你还需要知道什么?语句
assertz(子句)。
本身在任何其他上下文之外都没有意义。表名和列名放在哪里?它们都内置在查询字符串中<代码>查询这里是一个MySQL查询。这就是你所展示的代码的结构。@jschimpf:标记在这里具体是什么?我已经回答了你的问题。有帮助吗?