我的程序中有一个变量列表,例如A、B、C、D、…、J,我需要将每个变量的域限制在相同的整数集合上,比如1、2、. 10。我知道几种不同的方法来实现这一点,但它们都至少使用了一种来自CLPFD的方法,例如X #> 0、X ins [domain]或fd_domain(args)。在没有任何内置库的情况下,我无法找到这样做的方法(这个项目禁止所有这些库)。
我认为这样的规则写就足够了:
A > 0, A < 11, B > 0, B < 11, ..., J > 0, J < 11但显然这些变量没有被充分实例化。我知道这是一个非常简单的问题,但我已经自己搜索了一段时间,而且真的没有其他的帮助资源。非常感谢。
发布于 2013-11-17 17:31:32
SWI中有between函数:
?- between(1, 9, A).
A = 1 ;
A = 2 ;
A = 3 ;
A = 4 ;
A = 5 ;
A = 6 ;
A = 7 ;
A = 8 ;
A = 9.如果这也被禁止(这是不标准的),那么您可以使用member/2。
?- member(A, [1, 2, 3, 4, 5, 6, 7, 8, 9]).
A = 1 ;
A = 2 ;
A = 3 ;
A = 4 ;
A = 5 ;
A = 6 ;
A = 7 ;
A = 8 ;
A = 9.但是,如果没有CLP(fd),您将被困在生成和测试范例中,也许最好找到一些解决办法,以一种特殊的方式检查变量值,以获得良好的性能。
https://stackoverflow.com/questions/20033675
复制相似问题