在数据脚本1.3.0上测试
数据:
[{:db/id -1 :name "Smith" :firstname "Oliver" :age 20}
{:db/id -2 :name "Jones" :firstname "Oliver" :age 20}
{:db/id -3 :name "Smith" :firstname "Amelia" :age 16}
{:db/id -4 :name "Jones" :firstname "Amelia" :age 16}]
尝试使用and
以下逻辑谓词查询姓名为 Smith 且年龄超过 18 岁的人,为什么它返回未过滤的整个集合?
'[:find ?firstname ?name
:where
[?p :name ?name]
[?p :firstname ?firstname]
[?p :age ?age]
[(and (= ?name "Smith") (> ?age 18))]]
;;; wrong result: #{[Oliver Smith] [Oliver Jones] [Amelia Smith] [Amelia Jones]}
然后更改为使用离散谓词进行查询并按预期获得满意的结果。
'[:find ?firstname ?name
:where
[?p :name ?name]
[?p :firstname ?firstname]
[?p :age ?age]
[(= ?name "Smith")]
[(> ?age 18)]]
;;; correct result: #{[Oliver Smith]}
是否datomic
或通常只支持分散datascript
到datalog
离散子句的数据模式?传统的逻辑运算and
等在这里不兼容吗?