自从我处理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).
任何人都可以给我一个如何解决的建议吗?非常感谢!
答案 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)