Sie müssen es wie folgt ändern:
actualizarveiculos(_,[],D, D).
actualizarveiculos(Tempo,[(X,Y)|RestoVeiculos],Acc, Res):-
Or is 2,
Vel is 2,
faz_andar_veic(Or,(X,Y),C,mod(Tempo,Vel)),
append(Acc,[C],D),
actualizarveiculos(Tempo,RestoVeiculos,D, Res).
faz_andar_veic(90,(X,Y),(X+1,Y),0).
faz_andar_veic(270,(X,Y),(X-1,Y),0).
faz_andar_veic(_,(X,Y),(X,Y),C):-
C=\=0.
Testlauf:
[debug] ?- actualizarveiculos(5, [(-5,3), (-4,4), (-4,5)], [], Res).
Res = [ (-5, 3), (-4, 4), (-4, 5)] .
Im Trace Sie Sie actualizarveiculos(5, [(-5,3), (-4,4), (-4,5)], N).
Abfrage bereitgestellt Da N ungebunden dann NovaVeiculos
wird ungebunden und dann tun Sie: append(NovaVeiculos,[C],D),
was wahrscheinlich nicht tut, was Sie denken, oder zumindest was Sie beabsichtigten, es zu tun. Was sie tut, ist, dass es eine ungebundene Variable mit einer Liste anzuhängen versucht, und das Ergebnis wird mit einer anderen ungebundene Variable vereinigt, die offensichtlich eine unendliche Anzahl von Lösungen geben kann, zB:
[debug] ?- actualizarveiculos(5, [(-5,3), (-4,4), (-4,5)], N).
N = [] ;
N = [_G3430] ;
N = [_G3430, _G3436] ;
N = [_G3430, _G3436, _G3442] ;
N = [_G3430, _G3436, _G3442, _G3448] ;
N = [_G3430, _G3436, _G3442, _G3448, _G3454] ;
N = [_G3430, _G3436, _G3442, _G3448, _G3454, _G3460] ;
N = [_G3430, _G3436, _G3442, _G3448, _G3454, _G3460, _G3466] ;
N = [_G3430, _G3436, _G3442, _G3448, _G3454, _G3460, _G3466, _G3472] ;
N = [_G3430, _G3436, _G3442, _G3448, _G3454, _G3460, _G3466, _G3472, _G3478] ;
N = [_G3430, _G3436, _G3442, _G3448, _G3454, _G3460, _G3466, _G3472, _G3478|...] ;
Hoffe, es hilft, kommentieren, wenn Sie habe Fragen. Da Sie das linha/3
Prädikat nicht vorsah tauschte ich es nur mit zwei Vereinheitlichungen:
Or is 2,
Vel is 2,
Sie nicht das linha Prädikat zur Verfügung gestellt haben, was bedeutet, dass wir es nicht Testlauf kann. Auch wenn Sie Prädikatnamen in Englisch eingeben könnten, die praktisch wären, da "eine Liste wie seine" erstellt, sagt nicht wirklich, wie Sie die Liste erstellen möchten. – Limmen
geben Sie einfach einen Wert zu Vel und Or, und Sie können es testen – user3636673