数据记录中未定义的谓词错误

时间:2014-03-16 23:19:24

标签: datalog

所以我目前正在学习数据记录。我启动它并键入以下内容:

parent(john, michael).

并及时给出了未定义的谓词错误。根据我的理解,这应该是在模拟数据库中定义关系的正确方法。怎么了?我在网上狩猎,什么都找不到。

我正在使用没有GUI的程序的Windows 64位版本

3 个答案:

答案 0 :(得分:3)

如Datalog的回答所述,不同的数据记录系统有不同的行为。如果您正在寻找一种快速而肮脏的方式来了解一般的数据记录,您还可以尝试使用“LogiQL”数据记录变体的在线解释器:https://repl.logicblox.com/。 (披露:我为制作LogiQL的公司工作。)作为一个你好世界你可以尝试:

=> addblock 'parent("john", "michael").'
Succesfully added block
=> print parent
/-------------------\
| john   | michael  |
\-------------------/

答案 1 :(得分:2)

您使用的数据记录系统的名称是什么? Datalog是一种语言的名称。不同的系统接受该语言的不同变体。有些人可能会要求您在使用之前声明谓词。

答案 2 :(得分:2)

您可以在DES的用户手册中找到这些问题的答案,该手册位于发行版的./doc文件夹中,也可以从其网页下载。 无论如何,你输入的是一个查询,也就是说,你并没有试图断言一个新的事实。如果要以交互方式断言事实,请使用命令/ assert,如:

DES> /assert parent(john, michael)

DES> parent(john,michael)

{            

  parent(john,michael)

}

Info: 1 tuple computed.          

断言Datalog事实(以及规则)的另一种方法是将它们存储在一个文件中,比如parents.dl,并查阅它(注意事后的结束点):

parents.dl的内容:

parent(john,michael).

parents.dl的内容结束

咨询它:

DES> /consult parents             

Info: 1 rule consulted.

DES> parent(john,michael)

{          

  parent(john,michael)

}

Info: 1 tuple computed.          

请注意,查询询问系统是否从其数据库中推导出事实父(john,michael),它确实是推导出来的。查询的其他用途包括变量,如:

DES> parent(X,Y)                  

{             

  parent(john,michael)

}

Info: 1 tuple computed.