1

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). 
Grundy
  • 81,538
Pasha
  • 55

1 Answers1

2
% ПРЕОБРАЗОВАНИЕ СПИСКА ЦЕЛЫХ ЧИСЕЛ В СТРОКУ
% Базовый алгоритм
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).