2017-06-21 112 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),則問題可能會消失。