2017-06-21 3 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). 

Das Haupt Prädikat sollte das Aux-Prädikat mit zwei zusätzlichen Parametern aufrufen, die sind (P-1) und 0, aber einige, warum es den Fehler gibt:Prolog - ein Aux-Prädikat in einem Haupt Prädikat

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

Aber wenn ich das Aux-Prädikat mit dem nächsten Beispiel nur laufen, es funktioniert super:

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

Jeder weiß, warum und wie ich es beheben kann?

+1

'is/2' ist ein Ausdruck-Evaluator, also müssen * alle * Variablen im rechten Ausdruck an Zahlen gebunden sein. – lurker

Antwort

2

Die Fehlermeldung Sie es im Grunde sagt in diesem Ausdruck, dass:

SpCnt is P-(LastP+LastC), 

die Variable LastC ohne Bindung eingeht.

Sie enthielt nicht genug Code für uns wirklich debuggen, aber ich merke, dass wenn ich den Code geladen ich diese Nachricht erhalten:

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

Prolog ist extrem Groß- und Kleinschreibung und Sie müssen Singleton betrachten variable Warnungen als kritische Fehler! Wenn nicht, werden Sie mit kaputten Code enden. Ich denke, es ist wahrscheinlich, dass, wenn Sie den Tippfehler korrigieren (Aufruf CListClist) in den Körper von vecLine2BitLine/4 das Problem wird weggehen.

Verwandte Themen