我想编写谓词cumulative/2
的自定义版本(或至少在功能方面类似的谓词)。我查找了CLP(FD)库的来源,我现在想知道修改该库是否是一个好主意(仅通过添加新的东西)以便合并新的my_cumulative/2
但是与库#并39; s 私有谓词可用 这样做。
我想添加以下功能:
[limit(3)]
,而不是[limit(2),limit(3),limit(1)]
;其中每个限制对应不同的资源)当我尝试添加自定义运算符/\
来计算交叉点时,我想到了这个想法(类似\/
表示联合),我看到实际上已经在clpfd中定义了一个。 pl但不是模块的一部分。
答案 0 :(得分:2)
首先,您应该尝试根据导出的库谓词来表达约束。如果需要使用库的私有谓词,可以使用其模块前缀(如clpfd:some_predicate(...)
)调用它。私有谓词可能会在没有通知的情况下发生变化,但如果您想尝试一些事情,它们会很有用,并且当您发现哪些对您有用时,您可以在SWI邮件列表中请求更多公共谓词等。要计算与公共谓词的交集,您可以使用例如:X in 0..5 #/\ X in 0..2, fd_dom(X, Dom)
。您可以将(#\/)
用于工会。
答案 1 :(得分:1)
您可以定义一个新模块,并在其中使用reexport/1
和reexport/2
指令重新导出完整的CLP(FD)库或只是其中的一部分。在这个新模块中,您可以添加新内容或在必要时覆盖现有内容。