prolog代码中的类型不匹配

时间:2012-04-13 14:20:17

标签: prolog

我写了一条如下规则:

rule_1561_cctype([],_,_,_).
rule_1561_cctype([X1|Y1],[Ru1|Ru1T],[Ru2|Ru2T],[Ru3|Ru3T]):-
    X1 is 0 -> Ru1 in {2,3,4}, Ru2 in {-1}, Ru3 in {-1}
    ;X1 is 1 -> Ru1 in {2,3,4}, Ru2 in {2,3,4}, Ru3 in {-1}
  ;X1 is 2 -> Ru1 in {2}, Ru2 in {2}, Ru3 in {2}
  ;rule_1561_cctype(Y1,Ru1,Ru2,Ru3),!.

我称这条规则如下:

rule_1561_cctype(CctypeInt, Ru1, Ru2,Ru3),

其中CctypeInt是整数列表。

但我在下面收到错误:

      935      9 Call: rule_1561_cctype(dom(0..2),dom({-1}\/(2..4)),dom({-1}\/(2..4)),dom({-1}\/(2..4))) ? 
! Type error in argument 2 of = /2
! integer expected, but [] found
! goal:  _310957=[]
      935      9 Exception: rule_1561_cctype(dom(0..2),dom({-1}\/(2..4)),dom({-1}\/(2..4)),dom({-1}\/(2..4))) ? 
我在某处错了吗?

1 个答案:

答案 0 :(得分:1)

你正在做约束逻辑编程,对吗?问题是Prolog尝试统一一个约束变量,该变量的范围超过带有空列表的数字并报告错误。

查看你的代码我假设对rule_1561_cctype(Y1,Ru1,Ru2,Ru3)的调用应该是rule_1561_cctype(Y1,Ru1T,Ru2T,Ru3T)。