gpt4 book ai didi

logicblox - 如何在 LogiQL 中创建自动编号谓词?

转载 作者:行者123 更新时间:2023-12-01 13:49:50 24 4
gpt4 key购买 nike

我想知道如何在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com