Prolog-主谓词中的辅助谓词

Prolog-主谓词中的辅助谓词,prolog,predicate,Prolog,Predicate,主谓词应使用两个附加参数调用辅助谓词,即(p-1)和0,但给出错误的原因如下: vecLine2BitLineAux([C | Cs],[P | Ps], N, LastP, LastC, BitLine) :- /* print(P), print(' '), print(C), print(' '), print(N), print(' '), print(LastP), print(' '), print(LastC), print(' '), prin

主谓词应使用两个附加参数调用辅助谓词,即(p-1)和0,但给出错误的原因如下:

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).
但是,如果我在下一个示例中运行Aux谓词,它会非常有效:

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

有人知道我为什么以及如何修复它吗?

那里的错误消息基本上告诉您,在这个表达式中:

vecLine2BitLineAux([1,2,1],[2,5,9],12, 1,0,BitLine).
变量
LastC
到达时没有绑定

您没有包含足够的代码供我们进行真正的调试,但我注意到,当我加载您的代码时,我收到以下消息:

SpCnt is P-(LastP+LastC),

Prolog非常区分大小写,您必须将单例变量警告视为严重错误如果不这样做,您将以代码中断而告终。我认为,如果您更正
vecLine2BitLine/4
正文中的键入错误(调用
CList
CList
),问题可能会消失。

is/2
是一个表达式计算器,因此要求右侧表达式中的所有变量都绑定到数字。
Warning: /Users/dlyons/Desktop/test.pl:11:
Singleton variables: [CList,Clist]