【问题标题】:Does pyDatalog have a "cut" operator like prolog?pyDatalog 是否有像 prolog 这样的“剪切”运算符?
【发布时间】:2018-01-29 09:12:17
【问题描述】:

这可能很简单,但我无法在任何地方找到答案。在 Prolog 中,当您想阻止它搜索其他答案时,一旦变量已经被实例化,您可以使用 !标志(通常称为“切割”标志)。 您可以在此链接中看到它以了解我的意思: http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse44

例如,给定规则:

max(X,Y,Z)  :-  X  =<  Y,!,  Y  =  Z.

如果我们查询:

max(X,Y,X).

!符号将防止 prolog 回溯并尝试通过重新实例化 X 来证明 (X =

pyDatalaog中有这样的东西吗?

【问题讨论】:

    标签: operator-keyword cut logic-programming pydatalog


    【解决方案1】:

    不,它没有剪切运算符。一般来说,Cut 不是 Datalog 的一部分。

    但是,pyDatalog 在找到函数的给定参数的第一个值后停止。 reference page 说:“函数应该首先定义最一般的子句,然后是更具体的子句。查询函数时,首先使用最后一个,找到答案后查询停止。”

    因此,您可以通过以下定义获得所需的内容:

    + (max[X,Y] == Y)
    (max[X,Y] == X) <= (Y < X)
    

    但请注意,有一个open issue

    【讨论】:

    • 哦,我明白了。那么唯一的办法就是得到所有答案,然后对它们进行排序并剔除不必要的答案?
    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 2017-07-24
    • 2010-10-05
    • 2015-06-24
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多