Prolog - 主谓词中的Aux谓词

时间:2017-06-21 15:28:50

标签: prolog predicate

vecLine2BitLineAux([C | Cs],[P | Ps], N, LastP, LastC, BitLine) :-
    /* print(P), print(' '), print(C), print(' '), print(N),
       print(' '), print(LastP), print(' '), print(LastC),
       print(' '), print(BitLine), print('\n'), */
    vecLine2BitLineAux(Cs,Ps, N, P, C, Res),
    SpCnt is P-(LastP+LastC),
    /* print(SpCnt),print('\n'), */
    fill_char(SpCnt, ' ', Spaces),
    fill_char(LastC, '*', Stars),
    append(Stars, Spaces, Tmp),
    append(Tmp, Res, BitLine).

vecLine2BitLine(CList, [P | Ps], N, BitLine) :-
   P1 is P-1,
   vecLine2BitLineAux(Clist, [P | Ps], N, P1, 0, BitLine).

主谓词应该使用2个附加参数调用Aux谓词,这些参数是(P-1)和0,但是为什么它会给出错误:

 Exception: (11) _L191 is 9- (5+_G559) ?

但是,如果我只是在下一个例子中运行Aux谓词,那么效果很好:

vecLine2BitLineAux([1,2,1],[2,5,9],12, 1,0,BitLine).

任何人都知道为什么以及如何解决它?

1 个答案:

答案 0 :(得分:2)

这里的错误信息基本上告诉你在这个表达式中:

SpCnt is P-(LastP+LastC),

变量LastC在没有绑定的情况下到达。

你没有包含足够的代码供我们真正调试,但我注意到当我加载你的代码时,我得到了这样的信息:

Warning: /Users/dlyons/Desktop/test.pl:11:
Singleton variables: [CList,Clist]

Prolog非常区分大小写,并且您必须将Singleton变量警告视为严重错误!如果不这样做,您将会遇到代码损坏。我认为,如果你纠正CList正文中的拼写错误(Clist vecLine2BitLine/4},问题就会消失。