首页 文章

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

提问于
浏览
2

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

parent(john, michael).

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

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

3 回答

  • 2

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

  • 3

    正如Datalog _695683中所提到的那样,我一般都在寻找一种快速而肮脏的方式来学习数据目录,你也可以尝试使用"LogiQL"数据记录变体的在线解释器:https://repl.logicblox.com/ . (披露:我为制作LogiQL的公司工作 . )作为一个你好世界你可以尝试:

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

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

    DES> /assert parent(john, michael)
    
    DES> parent(john,michael)
    
    {            
    
      parent(john,michael)
    
    }
    
    Info: 1 tuple computed.
    

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

    parent.dl的内容:

    parent(john,michael).
    

    parent.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.
    

相关问题