2017-06-21 114 views
1
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个额外的参数,这些参数(P-1)和0,但一些为什么它给出了错误:的Prolog - 一个AUX谓词在主谓词

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

但是,如果我只是下面的例子中运行辅助谓词,它的伟大工程:

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

任何人知道为什么,我该如何解决?

+1

'is/2'是一个表达式求值器,因此要求右边表达式中的* all *变量绑定到数字。 – lurker

回答

2

该错误消息有基本上告诉你在此表达式:

SpCnt is P-(LastP+LastC), 

可变LastC到达而不结合。

你没有包括足够的代码,我们真正的调试,但我注意到,当我装你的代码,我得到这个消息:

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

Prolog是非常区分大小写,你一定认为辛格尔顿变量警告是关键错误!如果你不这样做,你会得到破碎的代码。我认为如果您在vecLine2BitLine/4正文中更正错字(称为CListClist),则问题可能会消失。