Sicstus prolog:标记列表中的列表

时间:2013-06-23 00:09:34

标签: prolog clpfd

自从我处理Sicstus prolog中的标签问题以来已经有很长一段时间了。我想创建一个长度为7的数组,其中每个项目又是一个包含4个整数的数组。我尝试了下面的代码,但是它不起作用并且给出了实例化错误。

:- use_module(library(clpfd)).

schedule(Ss) :-    
    length(Ss, 7),
    Ss = [[A, B, C, D]|T],
    solve_days(Ss),
    labeling([], Ss).

solve_days([]).
solve_days([[A, B, C, D]|T]):-
    A in 1..3,
    B in 4..7,
    C in 7..9,
    D in 6..10,
   solve_days(T).        

任何人都可以给我一个如何解决的建议吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

标签的论据必须是一个简单的清单。解决此问题的一种方法是使用append / 3来展平A..D和T,例如append([A,B,C,D],T,Vars)

答案 1 :(得分:1)

经常看到解决这种烦恼的方法是在调用标签之前使用谓词term_variables/2

预测term_variables/2是自Corr.2以来的ISO核心谓词,并确定术语中的变量列表。

在目前的情况下,将替换

labeling([], Ss) 

通过

term_variables(Ss, Vars), labeling([], Vars)