Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure n元谓词Datomic(n!=2)可能吗?_Clojure_Datomic_Datalog - Fatal编程技术网

Clojure n元谓词Datomic(n!=2)可能吗?

Clojure n元谓词Datomic(n!=2)可能吗?,clojure,datomic,datalog,Clojure,Datomic,Datalog,我试图将我读到的关于数据日志的内容与Datomic的描述相匹配。我在Datomic中看到的所有谓词都是三元组,即[entity attribute value]或更具prologian语法的属性(e,v)。另一方面,数据日志支持n元谓词,如pred(a、b、c、d) 我怎么配这个 我是否遗漏了Datomic的一个特性,即它是否有n元谓词,或者我是否可以以某种方式对它们进行建模 Datomics数据日志是通常称为数据日志的受限版本吗 传统数据日志中的n元谓词实际上类似于关系数据库中的表。因此,例如

我试图将我读到的关于数据日志的内容与Datomic的描述相匹配。我在Datomic中看到的所有谓词都是三元组,即[entity attribute value]或更具prologian语法的属性(e,v)。另一方面,数据日志支持n元谓词,如pred(a、b、c、d)

我怎么配这个

  • 我是否遗漏了Datomic的一个特性,即它是否有n元谓词,或者我是否可以以某种方式对它们进行建模
  • Datomics数据日志是通常称为数据日志的受限版本吗

  • 传统数据日志中的n元谓词实际上类似于关系数据库中的表。因此,例如,以下行将添加关于传统数据日志系统中的人员的信息:

    assert Person("John", "Smith", "1985-01-01")
    
    请注意,第三个值是出生日期的唯一信息是它在谓词中的位置

    Datomic不使用像这样的自由形式谓词来存储数据。它在查询端严格使用数据日志。要在Datomic中表示类似于上面提到的人的东西,您需要创建三个属性。您可以调用以下属性:
    :person/first name
    :person/last name
    :person/dob
    (请注意,
    :person/
    只是名称的一部分,它实际上并不创建任何类型的结构或类似表格的东西)

    每个属性都需要使用
    transact
    功能安装,然后才能使用。以下是您需要发送到transact for
    :person/last name

    [{:db/id #db/id[:db.part/db]
      :db/ident :person/last-name
      :db/valueType :db.type/string
      :db/cardinality :db.cardinality/one
      :db/fulltext true
      :db/doc "A person's last name"
      :db.install/_attribute :db.part/db}]
    
    您可以在Datomic的文档中找到更多详细信息:

    一旦具备了这些属性,您就可以通过处理以下事务来添加与我们开始时相同的信息:

    [{:db/id #db/id[:db.part/user]
    :person/first-name "John"
    :person/last-name "Smith"
    :person/dob "1985-01-01"}]
    

    所以简单的回答是:没有Datomic在输入端不做n元谓词,但是在n元谓词中没有任何东西不能用Datomic表示。优点是,现在您有了一个命名属性,而不是仅根据它在谓词中的位置来定义的属性(这在现实系统中非常脆弱:想想如何更改类似的模式)。

    Ah!我在文档中找不到这种区别。