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). 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). Source: https://ru.stackoverflow.com/questions/636587/
All Articles