2
我在SICStus Prolog的一个程序,运行以下限制:Prolog的动态约束
processList([Elem1,Elem2|_], X) :-
(Elem1 #= 0 #/\ Elem2 #= X) #\/
Elem1 #= X.
但我需要把它设置动态
processList([Elem1,Elem2,Elem3|_], X) :-
(Elem1 #= 0 #/\ Elem2 #= 0 #/\ Elem3 #= X) #\/
(Elem1 #= 0 #/\ Elem2 #= X) #\/
Elem1 #= X.
如果我有4个元素叫它我会有更大的限制,但模式总是一样的。
我已经查看了表谓词(tuples_in/2
,在SWI-Prolog中),但是这就需要我必须计算所有可能的有效值组合。
有没有其他办法可以做到这一点?
我觉得我还不够清楚。我正在使用约束逻辑编程(使用clpr库是精确的),所以我不能确定该元素是否为0(如maplist那样),我需要使用'#'运算符进行限制。当时我告诉我的教授说,我无法制定动态限制,甚至连他都无法解决问题(他们每年都会在课程中添加新问题以避免作弊)。我最终只需要使用第一段代码。 – CMJunior 2015-09-18 13:14:55
@CMJunior。请告诉我更多!我有一段时间没有使用clp(R),但直觉上我会猜测它(原则上)可以与普通的Prolog使用语法统一进行互操作。 – repeat 2015-09-18 13:25:16
我们需要制作一个简易的序言版本作为ABC拼图。其中一个限制是,如果在列或行之前有一个字母,从列/行的角度来看董事会,则需要看到该字母,换句话说,所有的电路板空间,直到看到该字母为止从这个角度来看必须是白色的(在我们的代码中,值为0)。 对于实验室任务,我们还需要使电路板尺寸变为动态,因此用户会告诉程序他想要播放哪种电路板尺寸。这就产生了这个线程的限制问题。 – CMJunior 2015-09-19 14:46:58