- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何在 LogicBlox/LogiQL 中使用自动编号的引用模式谓词
我遵循了 manual 中的示例但随后我无法将事实断言到实体谓词中,第一个将被添加但后续尝试不会。
这是我在 LB 交互式 shell 中尝试做的事情:
lb> create wibble
created workspace 'wibble'
lb wibble> addblock '
>auto(x), auto_id(x:id) -> int(id).
>lang:autoNumbered(`auto_id).
>cons_auto[] = x -> auto(x).
>lang:constructor(`cons_auto).'
added block 'block_1Z2ZWC0N'
lb wibble> exec '+auto(x), +cons_auto[] = x.'
lb wibble> popcount auto
1: auto
lb wibble> exec '+auto(x), +cons_auto[] = x.'
lb wibble> popcount auto
1: auto
最佳答案
这里的问题是构造函数 cons_auto。构造函数的工作方式是,对于构造函数的每个唯一键元组,都会创建一个唯一的实体,无论您使用相同的键元组断言到构造函数中多少次
您已经定义了一个没有键的构造函数。这意味着无论您执行多少次插入其中的增量规则断言,都将使用此构造函数创建一个实体。
您可以稍微不同地定义构造函数,例如使用一个键:
cons_auto_onekey[key] = x -> int(key), auto(x).
lang:constructor(`cons_auto_onekey).
现在您可以:
+cons_auto_onekey[1] = x, +auto(x).
然后,
+cons_auto_onekey[2] = x, +auto(x).
您会看到将创建两个自动实体。
当然,我怀疑这不是您想要的——因为您打算如何获得 key ?您将 auto 设为自动编号实体的全部意义可能是因为您想自动生成“引用”。
这是 transaction:id 有用的地方。例如
+cons_auto_onekey[key] = x, +auto(x) <-
transaction:id[] = key.
请注意,transaction:id 对于每个事务、每个工作区都是唯一的。这意味着在同一笔交易中,您只能获得一个交易:id,如果您想在同一笔交易中创建多个汽车实体,则必须对交易进行一些计算:id以获得更多唯一编号交易。
还有一个 uid 系列函数也可以帮助生成唯一的 id。但是你必须有一些独特的东西来使用它来生成。我不确定这是否对您有帮助,但如果以上内容还不能帮助您,请告诉我,我们可以探讨 uid 是否可以提供帮助。
关于logicblox - 如何在 LogiQL 中创建自动编号谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760976/
我想知道如何在 LogicBlox/LogiQL 中使用自动编号的引用模式谓词 我遵循了 manual 中的示例但随后我无法将事实断言到实体谓词中,第一个将被添加但后续尝试不会。 这是我在 LB 交互
LogicBlox 数据库使用 LogiQL 语言进行编程,根据他们的网站,这是 Datalog 的某种变体: Applications are written using the LogiQL la
我是一名优秀的程序员,十分优秀!