【问题标题】:Resolving constraints in Prolog在 Prolog 中解决约束
【发布时间】:2014-04-19 18:23:01
【问题描述】:

我正在寻找资源来学习解决 Prolog 中的约束。例如,

List=[X, Y, Z], List ins 1..4, X - Y #= Z.

【问题讨论】:

  • 这是不正确的 Prolog 语法。 List[X, Y, Z] 无效,正如您在 previously posted problem 中所评论的那样。
  • 谢谢,我已经更正了。

标签: prolog constraint-programming clpfd


【解决方案1】:

据我了解,您希望获得具体的解决方案(而不是域)。为此,请使用label/1labeling/2,这将给出所有明确的解决方案(通过回溯)。在 SWI-Prolog 中,这些谓词记录在这里:labeling/2

label(List) 等价于labeling([],List)

对于这个简单的例子,label(List) 就足够了:

?- List=[X, Y, Z], List ins 1..4, X - Y #= Z,label(List).

一般而言,阅读clpfd 的完整文档(此处为 SWI-Prolog)将使您受益。

【讨论】:

  • 我试图弄清楚 Prolog 是如何计算域的。你能推荐一些资料来阅读更多吗?
  • 如果您想要对域(以及传播者等)如何工作的一般性描述,一本关于约束(逻辑)编程的完整书籍可能最适合描述一些细节。我喜欢这方面的一些书:Rina Dechter:“约束处理”(2003 年)、Apt“约束编程原理”(2003 年)、Marriott & Stuckey “约束编程”(1998 年,有点旧但仍然鼓舞人心)。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多