2

自从我处理 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).        

谁能给我一个建议如何解决它?非常感谢!

4

2 回答 2

1

标签的参数必须是一个普通列表。解决此问题的一种方法是使用 append/3 来展平 A..D 和 T,例如append([A,B,C,D],T,Vars).

于 2013-06-23T08:43:45.033 回答
1

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

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

在目前的情况下,将替换

labeling([], Ss) 

经过

term_variables(Ss, Vars), labeling([], Vars)
于 2016-12-13T11:32:50.373 回答