Пролог Список констант для строки - PullRequest
0 голосов
/ 29 июля 2011

у меня есть входной список: [asd, qweqwe, fsdf, lkasd] Как видно из кода, я хочу соединить каждую константу списка для вывода одного списка переменных. Я использую yap пролог, я проверяю этот код и пишу: - беги. функция записи выводит _G1233, а не 'asd, asd2, asd3, asd4' Зачем ? как я должен изменить код для вывода меня 'asd, asd2, asd3, asd4'?

run :- toAtomicVars([asd,asd2,asd3,asd4],',',Out),
write(Out),nl.


toAtomicVars([],In,Out).
toAtomicVars([A|B],In,Out) :-
atomic_concat(A,In,Out1),
atomic_concat(',',Out1,Out2),
toAtomicVars(B,Out2,Out2).

1 Ответ

0 голосов
/ 29 июля 2011

вы (должны) получить предупреждение типа

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...