Попытка реализовать цикл for / next в прологе является ярким свидетельством того, что вы думаете с точки зрения императивного программирования, где вы говорите компьютеру, что делать, а не с точки зрения декларативное программирование, где вы описываете решение и позволяете механизму вывода Prolog выяснить это.
Если, однако, вы хотите создать список, содержащий упорядоченный диапазон чисел, что-то вроде следующего будет "git""сделано" с помощью магии списка различий:
range( X , X , [X] )
.
range( X , Y , [X|Z] ) :-
X < Y ,
X1 is X + 1 ,
range( X1 , Y , Z )
.
range( X , Y , [X|Z] ) :-
X > Y ,
X1 is X - 1 ,
range( X1 , Y , Z )
.