1

我正在使用 swi-prolog rb_trees。标准实现使用“==”来比较值,我需要使用“=@=”,有什么办法吗?

如果不可能,我想我需要为我存储在树中的子句找到一些其他表示形式。子句具有这种格式,例如:

cl(daughter(X,Y), [female(X), parent(Y,X)])

我需要上面的条款等于例如这个条款:

cl(daughter(A,B), [female(A), parent(B,A)])

我猜一个只为 =@= 子句提供相同输出的函数是 describe_clause。但是它没有输出参数,所以我无法将 describe_clause 的输出存储到 rb_tree 中。

4

2 回答 2

2

也许您可以在子句上使用 numbervars/3 将它们存储在红黑树中,然后使用 varnumbers/3 来取回原始子句?谓词 numbervars/3 将为子句奠定基础,也许这会使 (==)/2 的使用适用于您的情况?

于 2013-05-01T13:35:50.630 回答
0

我认为没有办法改变用于比较的谓词。

最好的解决方案可能是使用基本术语作为键,从那时起 和 之间的差异就==消失=@=了。(事实上​​,无论如何使用基本术语是一个好主意,因为您不希望在树操作之间发生的变量绑定使树的 order 属性无效。)

于 2013-04-30T22:07:57.843 回答