Нет, это не сработает.Правильный предикат:
position(X,list(nil),0). %empty list
position(X,list(X,T),1). %list with X as head or first element
position(X,list(H,T),Z):-
position(X, T, Z1), %X is in tail of list (H,T)
Z is Z1 + 1.
Запись position(X,list(T,nil),Z1), %X is in tail of list (H,T)
приведет к циклу, и это логическая ошибка, поскольку нет причины вызывать position
с list(T, nil)
.T
уже является списком или атомом nil
.