所以我目前正在学习数据记录。我启动它并键入以下内容:
parent(john, michael).
并及时给出了未定义的谓词错误。根据我的理解,这应该是在模拟数据库中定义关系的正确方法。怎么了?我在网上狩猎,什么都找不到。
我正在使用没有GUI的程序的Windows 64位版本
答案 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.