首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List ECLiPSe clp的简单算术约束

List ECLiPSe clp的简单算术约束
EN

Stack Overflow用户
提问于 2016-05-19 06:05:10
回答 1查看 241关注 0票数 2

我想对列表的所有值做一个简单的约束,我希望数组的每一行的每个索引都有以下(ic)约束:

500 #= 2^X1 + 2^X2 + 2^X3 + ... + 2^X9

我试着做下面的代码。数组是一个9x9的矩阵,对于每一行,我希望满足上面的约束。但是,这似乎不起作用,程序找不到任何满足约束的可能值。

代码语言:javascript
复制
model(Array) :- 
Array :: 1..9,
(for(I,1,9), param(Array) 
 do
      X1 is Array[I,1],
      X2 is Array(I,2],
      X3 is Array[I,3],
      X4 is Array[I,4],
      X5 is Array[I,5],
      X6 is Array[I,6],
      X7 is Array[I,7],
      X8 is Array[I,8],
      X9 is Array[I,9],
      500 #= 2^X1 + 2^X2 + 2^X3 + 2^X4 + 2^X5 + 2x^X6 + 2^X7 + 2^X8 + 2^X9

),
term_variables(Array,L),
labeling(L),
printBoard(Array).
EN

回答 1

Stack Overflow用户

发布于 2016-05-20 19:18:04

这似乎是涉及求幂表达式的整数约束实现中的一个错误。因为您的变量都是整型的,所以您可以用$=替换#=,它就可以工作了( #约束应该对变量施加完整性,而$约束不能做到这一点)。

顺便说一下,你可以这样缩短你的代码:

代码语言:javascript
复制
    ...,
    ( foreacharg(Row,Array) do
        ( foreacharg(X,Row), foreach(2^X,Powers) do true ),
        500 $= sum(Powers)
    ),
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37310862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档