Visual prolog 5.2
p([],"").
p([H|T],S):-
p(T,SS),
str_int(C,H),
str_char(C,R), /*проблема здесь если число >9 то то решение не находится и в окне вывода пусто*/
frontchar(S,R,SS).
% ПРЕОБРАЗОВАНИЕ СПИСКА ЦЕЛЫХ ЧИСЕЛ В СТРОКУ
% Базовый алгоритм
DOMAINS
integer_list = integer*.
PREDICATES
P(integer_list, string).
CLAUSES
% Базовое условие рекурсии («условие прекращения рекурсии»)
p([], "").
% Рекурсивное правило
P([H | T], S) :-
P(T, S1), % Рекурсивный вызов
% Преобразование H (тип int) к С (тип char)
char_int(C, H),
% Добавленние С (char) к началу строки S1 даёт строку S
frontchar(C, S1, S).
GOAL
p([1,5,10,10,5,1], S), write(S).
%**************************************************************
% Оптимизированный вариант алгоритма
DOMAINS
integer_list = integer*.
PREDICATES
P(integer_list, string).
p(integer_list, string, string).
CLAUSES
% Предложение верхнего уровня
p(L, S) :-
p(L, "", S).
% Базовое условие рекурсии («условие прекращения рекурсии»)
p([], S, S).
% Рекурсивное правило
P([H | T], Acc, S) :-
char_int(C, H), % Преобразование H (тип int) к С (тип char)
% Добавленние С (char) к началу строки Acc даёт строку Acc1
frontchar(C, Acc, Acc1),
% Рекурсивный вызов (хвостовая рекурсия может быть оптимизирована
% (и в данном случае это происходит )
% и преобазована компилятором в цикл )
p(T, Acc1, S).
GOAL
p([1,5,10,10,5,1], S), write(S).