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?
'is/2' ist ein Ausdruck-Evaluator, also müssen * alle * Variablen im rechten Ausdruck an Zahlen gebunden sein. – lurker