【问题标题】:Sicstus prolog: labeling a list in a listSicstus prolog:在列表中标记列表
【发布时间】:2013-06-19 20:13:43
【问题描述】:

我已经很久没有处理 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).        

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

【问题讨论】:

  • From sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/… domain/3 用于变量列表。对于单个变量,应使用“in”。不要忘记也设置一个域。
  • 谢谢哈坎克。我做了一些改变。 Sicstus prolog 说在 user:labeling/2 的参数 2 中输入错误!期望一个整数,但发现 [_128,_130,_132,_134] !目标:标签(用户:[],[[_128,_130,_132,_134],[_13
  • 出于某种原因将 tite 从“array”重命名为“list”。

标签: prolog clpfd


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    在当前情况下,将替换

    labeling([], Ss) 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多