修改SWI-Prolog库是个好主意吗?

时间:2013-06-17 14:16:13

标签: module prolog swi-prolog clpfd

我想编写谓词cumulative/2的自定义版本(或至少在功能方面类似的谓词)。我查找了CLP(FD)库的来源,我现在想知道修改该库是否是一个好主意(仅通过添加新的东西)以便合并新的my_cumulative/2但是与库#并39; s 私有谓词可用 这样做。

我想添加以下功能:

  • 我希望任务规划人员能够抢先一步(意味着计划任务可以在几个时间间隔内进行分割")
  • 除了累积之外,我希望它是多资源的(这意味着我可以拥有[limit(3)],而不是[limit(2),limit(3),limit(1)];其中每个限制对应不同的资源)
  • 我希望为每项任务添加优先级,以便更高优先级的任务具有更多的决策权力"并且不能由较低的人安排。
  • 我想要解决方案" not-schedulable"成为任务的可能解决方案。

当我尝试添加自定义运算符/\来计算交叉点时,我想到了这个想法(类似\/表示联合),我看到实际上已经在clpfd中定义了一个。 pl但不是模块的一部分。

2 个答案:

答案 0 :(得分:2)

首先,您应该尝试根据导出的库谓词来表达约束。如果需要使用库的私有谓词,可以使用其模块前缀(如clpfd:some_predicate(...))调用它。私有谓词可能会在没有通知的情况下发生变化,但如果您想尝试一些事情,它们会很有用,并且当您发现哪些对您有用时,您可以在SWI邮件列表中请求更多公共谓词等。要计算与公共谓词的交集,您可以使用例如:X in 0..5 #/\ X in 0..2, fd_dom(X, Dom)。您可以将(#\/)用于工会。

答案 1 :(得分:1)

您可以定义一个新模块,并在其中使用reexport/1reexport/2指令重新导出完整的CLP(FD)库或只是其中的一部分。在这个新模块中,您可以添加新内容或在必要时覆盖现有内容。