вы (должны) получить предупреждение типа
Singleton variables: [In,Out]
Singleton variables: [Out]
, что означает, что вы действительно ничего не делаете с этими переменными:
toAtomicVars([],In,Out).
Вход и выход может быть любым, поэтому прологпросто печатает фиктивное значение _Gsomething, которое означает, что переменная не была создана.
то же самое происходит во втором предложении:
toAtomicVars([A|B],In,Out) :-
atomic_concat(A,In,Out1),
atomic_concat(',',Out1,Out2),
toAtomicVars(B,Out2,Out2).
вы нигде не говорите, что это такое.
лично я думаю, что было бы проще, если бы вы просто напечаталикаждая переменная рекурсивно и затем печатает запятую, что-то вроде:
print_list([X]):-
write(X).
print_list([H|T]):-
write(H),
write(', '),
print_list(T).
, но если вы хотите поместить запятые в список, вы должны добавить правило, которое определяет Out.