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).
任何人都知道为什么以及如何解决它?
答案 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
},问题就会消失。